From: hgn Date: Mon, 2 Sep 2024 17:28:41 +0000 (+0000) Subject: reuse addr X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=2e74533f97344eca4b37b5793b6766788aab0426;p=u461_serv.git reuse addr --- diff --git a/builds2n.sh b/builds2n.sh index a77344f..04cd1c8 100755 --- a/builds2n.sh +++ b/builds2n.sh @@ -1,3 +1,3 @@ gcc -Wall -Wno-unused-function -ggdb3 -O0 -fsanitize=address servers2n.c \ - -ls2n \ + -ls2n -lpthread -lssl -lcrypto \ -o bin/servers2n && bin/servers2n ; echo exit: $? diff --git a/servers2n.c b/servers2n.c index e93260e..28b5f58 100644 --- a/servers2n.c +++ b/servers2n.c @@ -77,9 +77,9 @@ static void _write_s2n_error( FILE *fp, const char *prefix ) static int open_listen_socket( int port ) { - int listenfd; - struct sockaddr_in serv_addr = {0}; - listenfd = socket( AF_INET, SOCK_STREAM, 0 ); + int listenfd; + struct sockaddr_in serv_addr = {0}; + listenfd = socket( AF_INET, SOCK_STREAM, 0 ); if( listenfd == -1 ) { @@ -87,25 +87,35 @@ static int open_listen_socket( int port ) return -1; } + if( setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, &(int){1}, sizeof(int) ) < 0 ) + { + fprintf( stderr, "setsockopt() error: %s\n", strerror(errno) ); + close( listenfd ); + return -1; + } + if( fcntl( listenfd, F_SETFL, O_NONBLOCK ) == -1 ) { fprintf( stderr, "fcntl() error: %s\n", strerror(errno) ); + close( listenfd ); return -1; } - serv_addr.sin_family = AF_INET; - serv_addr.sin_addr.s_addr = htonl( INADDR_ANY ); - serv_addr.sin_port = htons( port ); + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = htonl( INADDR_ANY ); + serv_addr.sin_port = htons( port ); - if( bind( listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr) ) == -1 ) + if( bind( listenfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr) ) == -1 ) { fprintf( stderr, "bind() error: %s\n", strerror(errno) ); + close( listenfd ); return -1; } - if( listen( listenfd, 10 ) == -1 ) + if( listen( listenfd, 10 ) == -1 ) { fprintf( stderr, "listen() error: %s\n", strerror(errno) ); + close( listenfd ); return -1; } @@ -465,8 +475,8 @@ int main(int argc, char *argv[]) int ticks_without_action = 0; - while( _run_server ) - { + while( _run_server ) + { _accept_any_new_client( listenfd, s2n_conf ); _process_handshakes(); _process_shutdowns(); @@ -476,7 +486,7 @@ int main(int argc, char *argv[]) spec.tv_sec = 0; spec.tv_nsec = 50000000; /* 0.05s (20 tick)*/ nanosleep( &spec, NULL ); - } + } printf( "Closing active connections\n" ); while(1)