From b19ac6fe3785b72311dae751fd4d28de1abfa4a5 Mon Sep 17 00:00:00 2001 From: Chris Broekema <broekema@astron.nl> Date: Tue, 13 Feb 2007 08:26:38 +0000 Subject: [PATCH] BugID: 1011 Add send and recv buffer to constructor and call initBuffers when the socket is created. --- LCS/Transport/src/TH_Socket.cc | 42 ++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/LCS/Transport/src/TH_Socket.cc b/LCS/Transport/src/TH_Socket.cc index 0b3468dc44a..2d868a038ed 100644 --- a/LCS/Transport/src/TH_Socket.cc +++ b/LCS/Transport/src/TH_Socket.cc @@ -43,7 +43,9 @@ TH_Socket::TH_Socket (const string& service, bool sync, int32 protocol, int32 backlog, - const bool openSocketNow): + const bool openSocketNow, + const int recvBufferSize, + const int sendBufferSize): itsIsServer (true), itsServerSocket(0), itsDataSocket (0), @@ -54,10 +56,12 @@ TH_Socket::TH_Socket (const string& service, itsProtocol (protocol), itsBacklog (backlog), itsIsBlocking (sync), - itsLastCmd (CmdNone) + itsLastCmd (CmdNone), + itsRecvBufferSize(recvBufferSize), + itsSendBufferSize(sendBufferSize) { - LOG_TRACE_FLOW("TH_Socket<server>"); - + LOG_TRACE_FLOW("TH_Socket<server>"); + if (openSocketNow) { ASSERTSTR(openSocket(), "Could not open server socket"); } @@ -71,7 +75,9 @@ TH_Socket::TH_Socket (const string& hostName, const string& service, bool sync, int32 protocol, - const bool openSocketNow) : + const bool openSocketNow, + const int recvBufferSize, + const int sendBufferSize) : itsIsServer (false), itsServerSocket(0), itsDataSocket (0), @@ -82,7 +88,9 @@ TH_Socket::TH_Socket (const string& hostName, itsProtocol (protocol), itsBacklog (0), itsIsBlocking (sync), - itsLastCmd (CmdNone) + itsLastCmd (CmdNone), + itsRecvBufferSize(recvBufferSize), + itsSendBufferSize(sendBufferSize) { LOG_TRACE_FLOW("TH_Socket<client>"); @@ -320,6 +328,8 @@ void TH_Socket::waitForSent(void*, int, int) // bool TH_Socket::init() { + bool result; + LOG_TRACE_RTTI("TH_Socket::init()"); if (!openSocket()) { @@ -334,10 +344,12 @@ bool TH_Socket::init() itsLastCmd = CmdNone; if (itsIsServer) { - return(connectToClient()); + result = connectToClient(); + } else { + result = connectToServer(); } - - return (connectToServer()); + initBuffers(itsRecvBufferSize, itsSendBufferSize); + return result; } @@ -345,12 +357,13 @@ bool TH_Socket::initBuffers(int recvBufferSize, int sendBufferSize) { // set the size of the kernel level socket buffer // use -1 in the constructor (default) to leave it untouched. +#ifndef HAVE_BGL // BG/L doesn't implement setsockopt int socketFD; - if (itsIsServer) socketFD = itsServerSocket->getSid(); + if (itsIsServer && itsServerSocket != NULL) socketFD = itsServerSocket->getSid(); else socketFD = itsDataSocket->getSid(); if (recvBufferSize != -1) { -#if defined __linux__ && !defined HAVE_BGL +#if defined __linux__ int name[] = { CTL_NET, NET_CORE, NET_CORE_RMEM_MAX }; int value; size_t valueSize = sizeof(value); @@ -362,16 +375,16 @@ bool TH_Socket::initBuffers(int recvBufferSize, int sendBufferSize) { LOG_WARN("TH_Socket: could not increase max socket receive buffer"); } } +#endif // now set the buffer for our socket if (setsockopt(socketFD, SOL_SOCKET, SO_RCVBUF, &recvBufferSize, sizeof(recvBufferSize)) < 0) { LOG_WARN("TH_Socket: receive buffer size could not be set, default size will be used."); } -#endif } if (sendBufferSize != -1) { -#if defined __linux__ && !defined HAVE_BGL +#if defined __linux__ int name[] = { CTL_NET, NET_CORE, NET_CORE_WMEM_MAX }; int value; size_t valueSize = sizeof(value); @@ -383,13 +396,14 @@ bool TH_Socket::initBuffers(int recvBufferSize, int sendBufferSize) { LOG_WARN("TH_Socket: could not increase max socket send buffer"); } } +#endif if (setsockopt(socketFD, SOL_SOCKET, SO_SNDBUF, &sendBufferSize, sizeof(sendBufferSize)) < 0) { LOG_WARN("TH_Socket: send buffer size could not be set, default size will be used."); } -#endif } +#endif /* HAVE_BGL */ return true; } -- GitLab