Browse Source

Prevent TcpTransport initialization errors from stopping TcpServer

Paul-Louis Ageneau 1 year ago
parent
commit
4978ea7e33
1 changed files with 6 additions and 2 deletions
  1. 6 2
      src/impl/tcpserver.cpp

+ 6 - 2
src/impl/tcpserver.cpp

@@ -66,8 +66,12 @@ shared_ptr<TcpTransport> TcpServer::accept() {
 			socket_t incomingSock = ::accept(mSock, (struct sockaddr *)&addr, &addrlen);
 
 			if (incomingSock != INVALID_SOCKET) {
-				return std::make_shared<TcpTransport>(incomingSock, nullptr); // no state callback
-
+				try {
+					return std::make_shared<TcpTransport>(incomingSock, nullptr); // no state callback
+				} catch(const std::exception &e) {
+					PLOG_WARNING << e.what();
+					::closesocket(incomingSock);
+				}
 			} else if (sockerrno != SEAGAIN && sockerrno != SEWOULDBLOCK) {
 				PLOG_ERROR << "TCP server failed, errno=" << sockerrno;
 				throw std::runtime_error("TCP server failed");