Check get_sock_opt error too.
authorPekka Riikonen <priikone@silcnet.org>
Sun, 9 Jan 2005 14:40:40 +0000 (14:40 +0000)
committerPekka Riikonen <priikone@silcnet.org>
Sun, 9 Jan 2005 14:40:40 +0000 (14:40 +0000)
apps/silcd/server.c

index 7c98f1054f2ffd875aeb9d19b08a233f62f653ef..05302a7f7c2e4bc2f7912da7c337c217a356392a 100644 (file)
@@ -976,13 +976,14 @@ SILC_TASK_CALLBACK(silc_server_connection_established)
   SilcServer server = app_context;
   SilcServerConnection sconn = (SilcServerConnection)context;
   int sock = fd;
-  int opt = EINVAL, optlen = sizeof(opt);
-    
+  int opt = EINVAL, optlen = sizeof(opt), ret;
+
+  ret = silc_net_get_socket_opt(sock, SOL_SOCKET, SO_ERROR, &opt, &optlen);
+
   silc_schedule_task_del_by_fd(server->schedule, sock);
   silc_schedule_unset_listen_fd(server->schedule, sock);
-  
-  silc_net_get_socket_opt(sock, SOL_SOCKET, SO_ERROR, &opt, &optlen);
-  if (opt != 0) {
+
+  if (ret != 0 || opt != 0) {
     SILC_LOG_ERROR(("Could not connect to router %s:%d: %s",
                    sconn->remote_host, sconn->remote_port, strerror(opt)));
     silc_net_close_connection(sock);