You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by nm...@apache.org on 2007/01/26 01:51:02 UTC

svn commit: r500074 - in /incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network: SocketOutputStream.cpp TcpSocket.cpp

Author: nmittler
Date: Thu Jan 25 16:51:01 2007
New Revision: 500074

URL: http://svn.apache.org/viewvc?view=rev&rev=500074
Log:
[AMQCPP-46] Fixed receipt of SIGPIPE on OS X when sending disconnect message on a broken socket

Modified:
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/SocketOutputStream.cpp
    incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/TcpSocket.cpp

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/SocketOutputStream.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/SocketOutputStream.cpp?view=diff&rev=500074&r1=500073&r2=500074
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/SocketOutputStream.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/SocketOutputStream.cpp Thu Jan 25 16:51:01 2007
@@ -29,16 +29,12 @@
 #include <stdlib.h>
 #include <stdio.h>
 
-#if !defined(SOCKET_NOSIGNAL)
-
-    #if defined(SO_NOSIGPIPE)
-        #define SOCKET_NOSIGNAL SO_NOSIGPIPE
-    #elif defined(MSG_NOSIGNAL)
-        #define SOCKET_NOSIGNAL MSG_NOSIGNAL
-    #else
-        #define SOCKET_NOSIGNAL 0
-    #endif
-
+#if defined(SOCKET_NOSIGNAL)
+    #define AMQ_SEND_OPTS SOCKET_NOSIGNAL
+#elif defined(MSG_NOSIGNAL)
+    #define AMQ_SEND_OPTS MSG_NOSIGNAL
+#else
+    #define AMQ_SEND_OPTS 0
 #endif
 
 using namespace activemq::network;
@@ -68,7 +64,7 @@
     throw (IOException)
 {
     int remaining = len;
-    int sendOpts = SOCKET_NOSIGNAL;
+    int sendOpts = AMQ_SEND_OPTS;
 
     if( debug ){
         printf("SocketOutputStream:write(), numbytes:%d -", len);

Modified: incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/TcpSocket.cpp
URL: http://svn.apache.org/viewvc/incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/TcpSocket.cpp?view=diff&rev=500074&r1=500073&r2=500074
==============================================================================
--- incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/TcpSocket.cpp (original)
+++ incubator/activemq/activemq-cpp/trunk/activemq-cpp/src/main/activemq/network/TcpSocket.cpp Thu Jan 25 16:51:01 2007
@@ -135,6 +135,21 @@
             "Socket::connect- Port out of range: %d", port );
     }
     
+#ifdef SO_NOSIGPIPE
+    {
+        int optval = 1;
+        if( ::setsockopt( socketHandle, 
+                          SOL_SOCKET, SO_NOSIGPIPE, 
+                          (char*)&optval, 
+                          sizeof(optval)) < 0 )
+        {
+            close();
+            throw SocketException ( __FILE__, __LINE__, 
+                "Socket::connect- Failed setting SO_NOSIGPIPE: %s", SocketError::getErrorString().c_str() );
+        }
+    }
+#endif
+    
     sockaddr_in target_addr;
     target_addr.sin_family = AF_INET;
     target_addr.sin_port = htons( ( short ) port );