diff options
Diffstat (limited to 'indra/llmessage/lliosocket.cpp')
-rw-r--r-- | indra/llmessage/lliosocket.cpp | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp index 920a5e4aa2..b1f55a297c 100644 --- a/indra/llmessage/lliosocket.cpp +++ b/indra/llmessage/lliosocket.cpp @@ -64,6 +64,40 @@ bool is_addr_in_use(apr_status_t status) #endif } +#if LL_LINUX +// Define this to see the actual file descriptors being tossed around. +//#define LL_DEBUG_SOCKET_FILE_DESCRIPTORS 1 +#if LL_DEBUG_SOCKET_FILE_DESCRIPTORS +#include "apr-1/apr_portable.h" +#endif +#endif + + +// Quick function +void ll_debug_socket(const char* msg, apr_socket_t* apr_sock) +{ +#if LL_DEBUG_SOCKET_FILE_DESCRIPTORS + if(!apr_sock) + { + lldebugs << "Socket -- " << (msg?msg:"") << ": no socket." << llendl; + return; + } + // *TODO: Why doesn't this work? + //apr_os_sock_t os_sock; + int os_sock; + if(APR_SUCCESS == apr_os_sock_get(&os_sock, apr_sock)) + { + lldebugs << "Socket -- " << (msg?msg:"") << " on fd " << os_sock + << " at " << apr_sock << llendl; + } + else + { + lldebugs << "Socket -- " << (msg?msg:"") << " no fd " + << " at " << apr_sock << llendl; + } +#endif +} + /// /// LLSocket /// @@ -199,6 +233,7 @@ bool LLSocket::blockingConnect(const LLHost& host) return false; } apr_socket_timeout_set(mSocket, 1000); + ll_debug_socket("Blocking connect", mSocket); if(ll_apr_warn_status(apr_socket_connect(mSocket, sa))) return false; setOptions(); return true; @@ -209,6 +244,7 @@ LLSocket::LLSocket(apr_socket_t* socket, apr_pool_t* pool) : mPool(pool), mPort(PORT_INVALID) { + ll_debug_socket("Constructing wholely formed socket", mSocket); LLMemType m1(LLMemType::MTYPE_IO_TCP); } @@ -216,9 +252,9 @@ LLSocket::~LLSocket() { LLMemType m1(LLMemType::MTYPE_IO_TCP); // *FIX: clean up memory we are holding. - //lldebugs << "Destroying LLSocket" << llendl; if(mSocket) { + ll_debug_socket("Destroying socket", mSocket); apr_socket_close(mSocket); } if(mPool) |