From 42e660e2a2f6642141a138760bbfefd78a6fb501 Mon Sep 17 00:00:00 2001 From: Nay Date: Mon, 11 Feb 2013 02:59:07 +0000 Subject: Core/Sockets: Always try to send MSG_NOSIGNAL in peer().send() Fixes RASocket::authenticate crash "MSG_NOSIGNAL: If you send() to a remote host which is no longer recv()ing, you'll typically get the signal SIGPIPE. Adding this flag prevents that signal from being raised." Closes #5040 Thanks to @derex for the hint --- src/server/authserver/Server/RealmSocket.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/server/authserver') diff --git a/src/server/authserver/Server/RealmSocket.cpp b/src/server/authserver/Server/RealmSocket.cpp index e67af783d5f..2e64321d8a1 100644 --- a/src/server/authserver/Server/RealmSocket.cpp +++ b/src/server/authserver/Server/RealmSocket.cpp @@ -138,7 +138,11 @@ ssize_t RealmSocket::noblk_send(ACE_Message_Block &message_block) return -1; // Try to send the message directly. +#ifdef MSG_NOSIGNAL ssize_t n = peer().send(message_block.rd_ptr(), len, MSG_NOSIGNAL); +#else + ssize_t n = peer().send(message_block.rd_ptr(), len); +#endif // MSG_NOSIGNAL if (n < 0) { -- cgit v1.2.3 From db0b81e8e78a3c5b42e5b45efdda2c2c99f1e312 Mon Sep 17 00:00:00 2001 From: Nay Date: Mon, 11 Feb 2013 03:33:02 +0000 Subject: Core/RealmSocket: Remove a not required #ifndef MSG_NOSIGNAL / #define MSG_NOSIGNAL 0 Somewhere in ACE overloads of send(), flags are default'ed to 0 if not provided --- src/server/authserver/Server/RealmSocket.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'src/server/authserver') diff --git a/src/server/authserver/Server/RealmSocket.cpp b/src/server/authserver/Server/RealmSocket.cpp index 2e64321d8a1..565a8c9a600 100644 --- a/src/server/authserver/Server/RealmSocket.cpp +++ b/src/server/authserver/Server/RealmSocket.cpp @@ -23,10 +23,6 @@ #include "RealmSocket.h" #include "Log.h" -#ifndef MSG_NOSIGNAL -#define MSG_NOSIGNAL 0 -#endif - RealmSocket::Session::Session(void) {} RealmSocket::Session::~Session(void) { } -- cgit v1.2.3