diff --git a/src/net/common/receiverhelper.cpp b/src/net/common/receiverhelper.cpp index 9940b1f3..09dd990c 100644 --- a/src/net/common/receiverhelper.cpp +++ b/src/net/common/receiverhelper.cpp @@ -65,7 +65,9 @@ ReceiverHelper::Recv(SOCKET sock, ReceiveBuffer &buf) if (!IS_VALID_RECV(bytesRecvd)) { - throw NetException(__FILE__, __LINE__, ERR_SOCK_RECV_FAILED, SOCKET_ERRNO()); + int errCode = SOCKET_ERRNO(); + if (errCode != SOCKET_ERR_WOULDBLOCK) + throw NetException(__FILE__, __LINE__, ERR_SOCK_RECV_FAILED, SOCKET_ERRNO()); } else if (bytesRecvd == 0) { diff --git a/src/net/common/senderthread.cpp b/src/net/common/senderthread.cpp index 67081972..7525e54d 100644 --- a/src/net/common/senderthread.cpp +++ b/src/net/common/senderthread.cpp @@ -27,7 +27,7 @@ using namespace std; -#define SEND_ERROR_TIMEOUT_MSEC 2000 +#define SEND_ERROR_TIMEOUT_MSEC 20000 SenderThread::SenderThread(SenderCallback &cb) : m_tmpOutBufSize(0), m_callback(cb) diff --git a/src/net/common/serveracceptthread.cpp b/src/net/common/serveracceptthread.cpp index 93482ae7..4b806599 100644 --- a/src/net/common/serveracceptthread.cpp +++ b/src/net/common/serveracceptthread.cpp @@ -183,6 +183,11 @@ ServerAcceptThread::AcceptLoop() { throw ServerException(__FILE__, __LINE__, ERR_SOCK_ACCEPT_FAILED, SOCKET_ERRNO()); } + unsigned long mode = 1; + if (IOCTLSOCKET(tmpData->GetSocket(), FIONBIO, &mode) == SOCKET_ERROR) + { + throw ServerException(__FILE__, __LINE__, ERR_SOCK_CREATION_FAILED, SOCKET_ERRNO()); + } // Optional call - don't check return value. // Enable keepalive - won't be of much use but better than nothing. int keepalive = 1; diff --git a/src/net/linux/socket_startup.cpp b/src/net/linux/socket_startup.cpp index be4840ed..75c6d42e 100644 --- a/src/net/linux/socket_startup.cpp +++ b/src/net/linux/socket_startup.cpp @@ -26,10 +26,14 @@ #include #include #include +#include + +using namespace std; bool socket_startup() { + signal(SIGPIPE, SIG_IGN); return true; }