Skip to content

Commit f57d9e2

Browse files
authoredMay 11, 2024
Merge pull request #1175 from paullouisageneau/fix-getpeername-failure
Prevent TcpTransport initialization errors from stopping TcpServer
2 parents 8116593 + c1985b6 commit f57d9e2

File tree

2 files changed

+7
-3
lines changed

2 files changed

+7
-3
lines changed
 

‎src/impl/tcpserver.cpp

+6-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,12 @@ shared_ptr<TcpTransport> TcpServer::accept() {
6666
socket_t incomingSock = ::accept(mSock, (struct sockaddr *)&addr, &addrlen);
6767

6868
if (incomingSock != INVALID_SOCKET) {
69-
return std::make_shared<TcpTransport>(incomingSock, nullptr); // no state callback
70-
69+
try {
70+
return std::make_shared<TcpTransport>(incomingSock, nullptr); // no state callback
71+
} catch(const std::exception &e) {
72+
PLOG_WARNING << e.what();
73+
::closesocket(incomingSock);
74+
}
7175
} else if (sockerrno != SEAGAIN && sockerrno != SEWOULDBLOCK) {
7276
PLOG_ERROR << "TCP server failed, errno=" << sockerrno;
7377
throw std::runtime_error("TCP server failed");

‎src/impl/tcptransport.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ TcpTransport::TcpTransport(socket_t sock, state_callback callback)
6969
struct sockaddr_storage addr;
7070
socklen_t addrlen = sizeof(addr);
7171
if (::getpeername(mSock, reinterpret_cast<struct sockaddr *>(&addr), &addrlen) < 0)
72-
throw std::runtime_error("getsockname failed");
72+
throw std::runtime_error("getpeername failed");
7373

7474
unmap_inet6_v4mapped(reinterpret_cast<struct sockaddr *>(&addr), &addrlen);
7575

0 commit comments

Comments
 (0)
Please sign in to comment.