Handle EINTR errno correctly

This commit is contained in:
baldurk
2018-09-26 13:39:26 +01:00
parent 3893fc2567
commit 0bad880e72
+6 -6
View File
@@ -118,7 +118,7 @@ Socket *Socket::AcceptClient(bool wait)
int err = errno;
if(err != EWOULDBLOCK && err != EAGAIN)
if(err != EWOULDBLOCK && err != EAGAIN && err != EINTR)
{
RDCWARN("accept: %s", errno_string(err).c_str());
Shutdown();
@@ -159,7 +159,7 @@ bool Socket::SendDataBlocking(const void *buf, uint32_t length)
{
int err = errno;
if(err == EWOULDBLOCK || err == EAGAIN)
if(err == EWOULDBLOCK || err == EAGAIN || err == EINTR)
{
RDCWARN("Timeout in send");
Shutdown();
@@ -201,7 +201,7 @@ bool Socket::IsRecvDataWaiting()
{
int err = errno;
if(err == EWOULDBLOCK || err == EAGAIN)
if(err == EWOULDBLOCK || err == EAGAIN || err == EINTR)
{
ret = 0;
}
@@ -233,7 +233,7 @@ bool Socket::RecvDataNonBlocking(void *buf, uint32_t &length)
length = 0;
int err = errno;
if(err == EWOULDBLOCK || err == EAGAIN)
if(err == EWOULDBLOCK || err == EAGAIN || err == EINTR)
{
return true;
}
@@ -282,7 +282,7 @@ bool Socket::RecvDataBlocking(void *buf, uint32_t length)
{
int err = errno;
if(err == EWOULDBLOCK || err == EAGAIN)
if(err == EWOULDBLOCK || err == EAGAIN || err == EINTR)
{
RDCWARN("Timeout in recv");
Shutdown();
@@ -438,7 +438,7 @@ Socket *CreateClientSocket(const char *host, uint16_t port, int timeoutMS)
int err = errno;
if(err == EWOULDBLOCK || err == EINPROGRESS)
if(err == EWOULDBLOCK || err == EINPROGRESS || err == EINTR)
{
timeval timeout;
timeout.tv_sec = (timeoutMS / 1000);