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 )
    {
       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;
    }
 
 
    int ticks_without_action = 0;
 
-       while( _run_server )
-       {
+   while( _run_server )
+   {
       _accept_any_new_client( listenfd, s2n_conf );
       _process_handshakes();
       _process_shutdowns();
       spec.tv_sec = 0;
       spec.tv_nsec = 50000000; /* 0.05s (20 tick)*/
       nanosleep( &spec, NULL );
-       }
+   }
 
    printf( "Closing active connections\n" );
    while(1)