reuse addr
authorhgn <hgodden00@gmail.com>
Mon, 2 Sep 2024 17:28:41 +0000 (17:28 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 2 Sep 2024 17:28:41 +0000 (17:28 +0000)
builds2n.sh
servers2n.c

index a77344fcc9765f0afda07f557da5b14110d67ba7..04cd1c8c84dba46593bf29d1b418767c3fdd9469 100755 (executable)
@@ -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: $?
index e93260e9b3159165663a569f43f93239ff279f25..28b5f58ee1b94de9b8fbee8104b2fb0b688195f7 100644 (file)
@@ -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)