Date: Tuesday, December 19, 2006 @ 12:14:15
  Author: marc
    Path: /cvsroot/carob/carob

Modified: include/SystemDependantDefs.hpp (1.9 -> 1.10) src/JavaSocket.cpp
          (1.62 -> 1.63)

Considerably simplified MSG_NOSIGNAL/SO_NOSIGPIPE logic.
Related to CAROB-117, CAROB-118 and others.


---------------------------------+
 include/SystemDependantDefs.hpp |   42 ++++++++++++++++----------------------
 src/JavaSocket.cpp              |    4 +--
 2 files changed, 20 insertions(+), 26 deletions(-)


Index: carob/include/SystemDependantDefs.hpp
diff -u carob/include/SystemDependantDefs.hpp:1.9 
carob/include/SystemDependantDefs.hpp:1.10
--- carob/include/SystemDependantDefs.hpp:1.9   Mon Dec 18 19:57:14 2006
+++ carob/include/SystemDependantDefs.hpp       Tue Dec 19 12:14:15 2006
@@ -35,47 +35,41 @@
 
 
////////////////////////////////////////////////////////////////////////////////
 // Sockets options
-
 /**
  * In Carob, we want to recover from closed socket errors. So we will tell the
  * system *not* to send sigpipes when writing on a closed socket.
  * Solutions to this are system dependant:
  * -> *nixes have MSG_NOSIGNAL flag for send(2/3) function
- * -> MaxOS/X >= 10.1 and FreeBSD have no MSG_NOSIGNAL but a socket option 
SO_NOSIGPIPE
+ * -> MaxOS/X >= 10.1 and old FreeBSD have no MSG_NOSIGNAL but a socket option 
SO_NOSIGPIPE
  *    (check socket(7) and setsockopt(2))
+ *    
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man2/setsockopt.2.html
  * -> ...
  */
 
-//   --- MINGW32 ---
-
-// bare Windows has no signals anyway, let's do nothing (not even
-// including sys/socket.h)
-#if defined(__MINGW32__)
-#  define MSG_NOSIGNAL 0
-#  define CAROB_USE_SO_NOSIGPIPE 0
-
-//   ---  Mac OSX  ----
-
-// no MSG_NOSIGNAL available but SO_NOSIGPIPE is
-// 
http://developer.apple.com/documentation/Darwin/Reference/ManPages/man2/setsockopt.2.html
-#elif defined(__APPLE__) && defined(__MACH__)   // TODO: add FreeBSD & co here?
-              // 
http://developer.apple.com/technotes/tn2002/tn2071.html#Section10
+#ifdef __MINGW32__
+#  include <ws2tcpip.h>
+#else
 #  include <sys/socket.h>
-#  define MSG_NOSIGNAL 0            // provide dummy value
-#  define CAROB_USE_SO_NOSIGPIPE 1
+#endif
 
-//   --- Default case / fallback --- (OK for most unices?)
 
-// if MSG_NOSIGNAL is available, then we can safely skip the 
setsockopt(SO_NOSIGPIPE) call
-#else
-#  include <sys/socket.h>
-#  if defined(MSG_NOSIGNAL)
-#    define CAROB_USE_SO_NOSIGPIPE 0
+#if !defined(MSG_NOSIGNAL)
+
+#  if defined(SO_NOSIGPIPE)
+     // If we can rely on setsockopt(SO_NOSIGPIPE)
+     // then we safely provide a dummmy MSG_NOSIGNAL
+#    define MSG_NOSIGNAL 0
+
+#  elif defined(__MINGW32__)
+     // NOP! MINGW32 is OK (really?)
+
 #  else
 #    error "Could not find either MSG_NOSIGNAL nor SO_NOSIGPIPE"
      // Solaris provides neither and DOES sends a SIGPIPE (see 
setsockopt(3SOCKET)
      // We have a problem here... See tentative solutions in CAROB-116
+
 #  endif
+
 #endif
 
 
Index: carob/src/JavaSocket.cpp
diff -u carob/src/JavaSocket.cpp:1.62 carob/src/JavaSocket.cpp:1.63
--- carob/src/JavaSocket.cpp:1.62       Mon Dec 18 19:57:14 2006
+++ carob/src/JavaSocket.cpp    Tue Dec 19 12:14:15 2006
@@ -93,8 +93,8 @@
   int opt_value = 1;
   if (setsockopt(socket_fd, IPPROTO_TCP, TCP_NODELAY,
                  reinterpret_cast<char*>(&opt_value), sizeof opt_value) == -1
-#if CAROB_USE_SO_NOSIGPIPE
-  // 3. Disable sigpipe
+#ifdef SO_NOSIGPIPE
+  // 3. Disable sigpipe, see SystemDependantDefs.hpp
       || setsockopt(socket_fd, SOL_SOCKET, SO_NOSIGPIPE,
                     reinterpret_cast<char*>(&opt_value), sizeof (opt_value) == 
-1)
 #endif

_______________________________________________
Carob-commits mailing list
[email protected]
https://forge.continuent.org/mailman/listinfo/carob-commits

Reply via email to