瀏覽代碼

LibCore: Make TCPServer::listen() report failure instead of asserting

Andreas Kling 4 年之前
父節點
當前提交
f88a7cd4e1
共有 3 個文件被更改,包括 15 次插入8 次删除
  1. 8 5
      Libraries/LibCore/TCPServer.cpp
  2. 1 1
      Services/TelnetServer/main.cpp
  3. 6 2
      Services/WebServer/main.cpp

+ 8 - 5
Libraries/LibCore/TCPServer.cpp

@@ -61,14 +61,17 @@ bool TCPServer::listen(const IPv4Address& address, u16 port)
     if (m_listening)
     if (m_listening)
         return false;
         return false;
 
 
-    int rc;
     auto socket_address = SocketAddress(address, port);
     auto socket_address = SocketAddress(address, port);
     auto in = socket_address.to_sockaddr_in();
     auto in = socket_address.to_sockaddr_in();
-    rc = ::bind(m_fd, (const sockaddr*)&in, sizeof(in));
-    ASSERT(rc == 0);
+    if (::bind(m_fd, (const sockaddr*)&in, sizeof(in)) < 0) {
+        perror("TCPServer::listen: bind");
+        return false;
+    }
 
 
-    rc = ::listen(m_fd, 5);
-    ASSERT(rc == 0);
+    if (::listen(m_fd, 5) < 0) {
+        perror("TCPServer::listen: listen");
+        return false;
+    }
     m_listening = true;
     m_listening = true;
 
 
     m_notifier = Notifier::construct(m_fd, Notifier::Event::Read, this);
     m_notifier = Notifier::construct(m_fd, Notifier::Event::Read, this);

+ 1 - 1
Services/TelnetServer/main.cpp

@@ -126,7 +126,7 @@ int main(int argc, char** argv)
     }
     }
 
 
     if (!server->listen({}, port)) {
     if (!server->listen({}, port)) {
-        perror("listen");
+        warnf("Listening on 0.0.0.0:{} failed", port);
         exit(1);
         exit(1);
     }
     }
 
 

+ 6 - 2
Services/WebServer/main.cpp

@@ -73,8 +73,12 @@ int main(int argc, char** argv)
         client->start();
         client->start();
     };
     };
 
 
-    server->listen({}, port);
-    printf("Listening on 0.0.0.0:%d\n", port);
+    if (!server->listen({}, port)) {
+        warnf("Failed to listen on 0.0.0.0:{}", port);
+        return 1;
+    }
+
+    outf("Listening on 0.0.0.0:{}", port);
 
 
     if (unveil("/res/icons", "r") < 0) {
     if (unveil("/res/icons", "r") < 0) {
         perror("unveil");
         perror("unveil");