diff options
Diffstat (limited to 'src/server.c')
| -rw-r--r-- | src/server.c | 21 |
1 files changed, 15 insertions, 6 deletions
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 <stdbool.h> #include <stdio.h> #include <string.h> +#include <sys/types.h> #include <sys/socket.h> #include <unistd.h> 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 +} |
