Trying to fix SIGPIPE issue on server (linux).

This commit is contained in:
lotodore
2007-10-30 13:03:17 +00:00
parent aac9bcb54b
commit b89ce1d67f
4 changed files with 13 additions and 2 deletions
+3 -1
View File
@@ -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)
{
+1 -1
View File
@@ -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)
+5
View File
@@ -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;
+4
View File
@@ -26,10 +26,14 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <csignal>
using namespace std;
bool
socket_startup()
{
signal(SIGPIPE, SIG_IGN);
return true;
}