runtime: improve startup observability
This commit is contained in:
@@ -10,6 +10,31 @@ void socket_timeout(socket_t s, long sec, long usec);
|
||||
void socket_reuse(socket_t s);
|
||||
void socket_keepalive(socket_t s);
|
||||
|
||||
namespace
|
||||
{
|
||||
bool socket_accept_should_retry()
|
||||
{
|
||||
#ifdef OS_WINDOWS
|
||||
const int wsa_error = WSAGetLastError();
|
||||
return wsa_error == WSAEWOULDBLOCK || wsa_error == WSAEINTR;
|
||||
#else
|
||||
#ifdef EINTR
|
||||
if (errno == EINTR)
|
||||
return true;
|
||||
#endif
|
||||
#ifdef EAGAIN
|
||||
if (errno == EAGAIN)
|
||||
return true;
|
||||
#endif
|
||||
#ifdef EWOULDBLOCK
|
||||
if (errno == EWOULDBLOCK)
|
||||
return true;
|
||||
#endif
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
int socket_read(socket_t desc, char* read_point, size_t space_left)
|
||||
{
|
||||
int ret;
|
||||
@@ -206,6 +231,8 @@ socket_t socket_accept(socket_t s, struct sockaddr_in *peer)
|
||||
|
||||
if ((desc = accept(s, (struct sockaddr *) peer, &i)) == -1)
|
||||
{
|
||||
if (socket_accept_should_retry())
|
||||
return -1;
|
||||
sys_err("accept: %s (fd %d)", strerror(errno), s);
|
||||
return -1;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user