From 534e521cb2bbf674900fcef724ca1463dc9d87ae Mon Sep 17 00:00:00 2001 From: c2ny Date: Sat, 17 Jan 2026 04:01:19 -0500 Subject: [PATCH] got some tcp done --- CMakeLists.txt | 2 ++ server | Bin 0 -> 27584 bytes src/main.c | 91 ++++++++++++++++++++++++++++++++++++------------- 3 files changed, 69 insertions(+), 24 deletions(-) create mode 100755 server diff --git a/CMakeLists.txt b/CMakeLists.txt index 6d9a0f9..f07cb83 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,6 +61,8 @@ target_link_libraries(${PROJECT_NAME} PRIVATE ssl crypto) target_include_directories(${PROJECT_NAME} PRIVATE "${EXTERN}/openssl/include") # libevent +set(EVENT__DISABLE_TESTS ON CACHE BOOL "" FORCE) +set(EVENT__DISABLE_REGRESS ON CACHE BOOL "" FORCE) add_subdirectory("${EXTERN}/libevent") target_include_directories(${PROJECT_NAME} PRIVATE "${EXTERN}/libevent/include") diff --git a/server b/server new file mode 100755 index 0000000000000000000000000000000000000000..f14605104ef1ecefc52ee87a26c631aac164063e GIT binary patch literal 27584 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 +#include #include #include #include @@ -14,27 +15,17 @@ #include #include "log.h" -void -die(const char *errstr, ...) { - va_list ap; +#define DIE(...) do {\ + log_error(__VA_ARGS__); \ + exit(1); \ +} while(0) - va_start(ap, errstr); - vfprintf(stderr, errstr, ap); - va_end(ap); - exit(1); -} -void -die_ssl(const char *errstr, ...) { - va_list ap; - - va_start(ap, errstr); - vfprintf(stderr, errstr, ap); - va_end(ap); - - ERR_print_errors_fp(stderr); - exit(1); -} +#define DIE_SSL(...) do {\ + log_error(__VA_ARGS__); \ + ERR_print_errors_fp(stderr); \ + exit(1); \ +} while(0) typedef struct { int fd; @@ -67,7 +58,7 @@ connect_tcp(char *hostname, char *port, int *clientfd) { hints.ai_flags = AI_PASSIVE; if ((rv = getaddrinfo(hostname, port, &hints, &res)) != 0) { - die("error getting address info: %s\n", gai_strerror(rv)); + DIE("error getting address info: %s\n", gai_strerror(rv)); } int fd; @@ -93,20 +84,72 @@ connect_tcp(char *hostname, char *port, int *clientfd) { return err; } + freeaddrinfo(res); - + *clientfd = fd; + return nullptr; } +// Returns error or nullptr char* -bind_tcp(char *port) { - +bind_tcp(char *port, int *bound_fd) { + int rv; + struct addrinfo hints, *res, *p; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_PASSIVE; + + if ((rv = getaddrinfo(NULL, port, &hints, &res)) != 0) { + DIE("error getting address info: %s\n", gai_strerror(rv)); + } + + int fd; + char ip_str[INET6_ADDRSTRLEN]; + for (p = res; p != nullptr; p = p->ai_next) { + if ((fd = socket(p->ai_family, p->ai_socktype, p->ai_protocol)) == -1) { + inet_ntop(p->ai_family, get_in_addr(p->ai_addr), ip_str, sizeof(ip_str)); + log_warn("Failed to create a socket"); + close(fd); + continue; + } + + int yes = 1; + if ((setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes))) != 0) { + log_warn("Unable to set SO_REUSEADDR on the socket"); + } + + + if ((rv = bind(fd, p->ai_addr, p->ai_addrlen))) { + inet_ntop(p->ai_family, get_in_addr(p->ai_addr), ip_str, sizeof(ip_str)); + log_warn("Failed to bind to %s:%s. %s", ip_str, port, strerror(errno)); + continue; + } + + inet_ntop(p->ai_family, get_in_addr(p->ai_addr), ip_str, sizeof(ip_str)); + log_info("Bound to %s:%s", ip_str, port); + break; + } + + if (p == nullptr) { + DIE("Failed to bind"); + } + + if ((listen(fd, 1)) == -1) { + DIE("listen: %s", strerror(errno)); + } + + *bound_fd = fd; + + return nullptr; } int main() { - + return 0; }