summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOxore <oxore@protonmail.com>2023-12-12 23:36:12 +0300
committerOxore <oxore@protonmail.com>2023-12-12 23:36:12 +0300
commit17c01af9dea19ab9e553ef0db775e43f74a752e5 (patch)
tree39647860089b25a026841a94d0c1b5323139f134
parent0b86520b9ff166cd285d077d3d8192653e7d95e9 (diff)
Impl printing source address
-rw-r--r--CMakeLists.txt4
-rw-r--r--client.c4
-rw-r--r--server.c21
3 files changed, 21 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index ec05a85..8b0a77a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -36,12 +36,12 @@ set(compile_flags
add_executable(server server.c)
target_compile_options(server PRIVATE ${compile_flags})
-target_compile_definitions(server PRIVATE _FORTIFY_SOURCE=2)
+target_compile_definitions(server PRIVATE $<$<CONFIG:Debug>:_FORTIFY_SOURCE=2>)
target_link_options(server PRIVATE $<$<CONFIG:Debug>:${common_debug_flags}>)
target_include_directories(server PRIVATE .)
add_executable(client client.c)
target_compile_options(client PRIVATE ${compile_flags})
-target_compile_definitions(client PRIVATE _FORTIFY_SOURCE=2)
+target_compile_definitions(client PRIVATE $<$<CONFIG:Debug>:_FORTIFY_SOURCE=2>)
target_link_options(client PRIVATE $<$<CONFIG:Debug>:${common_debug_flags}>)
target_include_directories(client PRIVATE .)
diff --git a/client.c b/client.c
index 524a0a8..c5491f6 100644
--- a/client.c
+++ b/client.c
@@ -15,8 +15,8 @@ int main(void)
}
struct sockaddr_in const serveraddr = {
.sin_family = AF_INET,
- .sin_port = htons(50037),
- .sin_addr.s_addr = htonl(0x7f000001),
+ .sin_port = htons(50037u),
+ .sin_addr.s_addr = htonl(INADDR_LOOPBACK),
};
for (int i = 0; i < 4; i++) {
ssize_t const ret = sendto(
diff --git a/server.c b/server.c
index e35a9b5..7288eca 100644
--- a/server.c
+++ b/server.c
@@ -15,7 +15,7 @@ int main(void)
}
struct sockaddr_in const serveraddr = {
.sin_family = AF_INET,
- .sin_port = htons(50037),
+ .sin_port = htons(50037u),
.sin_addr.s_addr = htonl(INADDR_ANY),
};
if (bind(fd, (struct sockaddr *)&serveraddr, sizeof(serveraddr)) < 0) {
@@ -23,14 +23,27 @@ int main(void)
return 1;
}
for (;;) {
+ struct sockaddr_in source_address;
char buffer[200];
- int const length = recvfrom(fd, buffer, sizeof(buffer) - 1, 0, NULL, 0);
+ socklen_t source_address_len = sizeof(source_address);
+ int const length = recvfrom(
+ fd,
+ buffer,
+ sizeof(buffer) - 1,
+ 0,
+ (struct sockaddr*)&source_address,
+ &source_address_len);
if (length < 0) {
perror("recvfrom failed");
break;
}
- buffer[length] = '\0';
- printf("%d bytes: '%s'\n", length, buffer);
+ uint32_t const addr = ntohl(source_address.sin_addr.s_addr);
+ uint8_t const a0 = addr >> 24;
+ uint8_t const a1 = addr >> 16;
+ uint8_t const a2 = addr >> 8;
+ uint8_t const a3 = addr;
+ printf("%d bytes: '%.*s' from %u.%u.%u.%u:%u\n",
+ length, (int)length, buffer, a0, a1, a2, a3, source_address.sin_port);
}
close(fd);
}