From a08ffaa472fc8a404a812ed3f3b5b5d3185ae960 Mon Sep 17 00:00:00 2001 From: frosty Date: Thu, 8 Jan 2026 11:12:48 -0500 Subject: Improved FreeBSD Support --- src/server.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/server.c b/src/server.c index e6a460a..1176a66 100644 --- a/src/server.c +++ b/src/server.c @@ -5,26 +5,35 @@ #include #include #include +#include #include #include static int initialize_server_socket(const char *ip, int port, int *server_fd_out, struct sockaddr_in *address_out) { - if ((*server_fd_out = socket(AF_INET, SOCK_STREAM, 0)) == 0) { + if ((*server_fd_out = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket failed"); fprintf(stderr, "[ERROR] initialize_server_socket: Failed to create socket.\n"); return -1; } int opt = 1; - if (setsockopt(*server_fd_out, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, - sizeof(opt))) { - perror("setsockopt failed"); - fprintf(stderr, "[ERROR] initialize_server_socket: Failed to set socket options.\n"); + + if (setsockopt(*server_fd_out, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) { + perror("setsockopt SO_REUSEADDR failed"); + } + + //Needed for FreeBSD Support + #ifdef SO_REUSEPORT + if (setsockopt(*server_fd_out, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt))) { + perror("setsockopt SO_REUSEPORT failed"); + fprintf(stderr, "[ERROR] initialize_server_socket: Failed to set SO_REUSEPORT.\n"); close(*server_fd_out); return -1; } + #endif + address_out->sin_family = AF_INET; address_out->sin_addr.s_addr = inet_addr(ip); @@ -178,4 +187,4 @@ int beaker_run(const char *ip, int port) { close(server_fd); return 0; -} \ No newline at end of file +} -- cgit v1.2.3