Detect the availability of MSG_NOSIGNAL/MSG_DONTWAIT
authorTrond Norbye <trond.norbye@gmail.com>
Tue, 1 Mar 2011 07:08:00 +0000 (08:08 +0100)
committerTrond Norbye <trond.norbye@gmail.com>
Tue, 1 Mar 2011 07:08:00 +0000 (08:08 +0100)
configure.ac
libmemcached/io.c
m4/socket_send_flags.m4 [new file with mode: 0644]

index c7d63f87742680e95d95a69437ff4c897dbb2a00..07927c92c1962b7003720996d70510395fa7612d 100644 (file)
@@ -79,6 +79,15 @@ AH_BOTTOM([
 #define closesocket(a) close(a)
 #define get_socket_errno() errno
 #endif
+
+#ifndef HAVE_MSG_NOSIGNAL
+#define MSG_NOSIGNAL 0
+#endif
+
+#ifndef HAVE_MSG_DONTWAIT
+#define MSG_DONTWAIT 0
+#endif
+
 #endif
 ])
 
@@ -144,6 +153,7 @@ AS_IF(test "x$ac_cv_header_winsock2_h" = "xyes",
        AM_CXXFLAGS="$AM_CXXFLAGS $NO_WERROR"
       ])
 DETECT_EAGAIN
+SOCKET_SEND_FLAGS
 
 AC_CONFIG_FILES([
   Makefile
index d3c5e4b6546e6b040d231c7536b9f22db608db2f..dedcdaf9e9deff939b1d599255263dae8baa4d30 100644 (file)
@@ -619,11 +619,7 @@ static ssize_t io_flush(memcached_server_write_instance_st ptr,
       increment_udp_message_id(ptr);
 
     WATCHPOINT_ASSERT(ptr->fd != -1);
-#if defined(__MACH__) && defined(__APPLE__) || defined(__FreeBSD__)
-    sent_length= send(ptr->fd, local_write_ptr, write_length, 0);
-#else
     sent_length= send(ptr->fd, local_write_ptr, write_length, MSG_NOSIGNAL|MSG_DONTWAIT);
-#endif
     if (sent_length == SOCKET_ERROR)
     {
       ptr->cached_errno= get_socket_errno();
diff --git a/m4/socket_send_flags.m4 b/m4/socket_send_flags.m4
new file mode 100644 (file)
index 0000000..8251980
--- /dev/null
@@ -0,0 +1,49 @@
+dnl  Copyright (C) 2011 Trond Norbye
+dnl This file is free software; Trond Norbye
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl ---------------------------------------------------------------------------
+dnl Macro: SOCKET_SEND_FLAGS
+dnl ---------------------------------------------------------------------------
+
+AC_DEFUN([SOCKET_SEND_FLAGS],
+[
+  AC_CACHE_CHECK([for MSG_NOSIGNAL], [ac_cv_msg_nosignal], [
+    AC_LANG_PUSH([C])
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -I${srcdir}"
+    AC_TRY_LINK([
+#include <sys/socket.h>
+                   ], [
+int flags= MSG_NOSIGNAL;
+                   ],
+                   [ ac_cv_msg_nosignal=yes ],
+                   [ ac_cv_msg_nosignal=no ])
+   CFLAGS="$save_CFLAGS"
+   AC_LANG_POP
+  ])
+
+  AC_CACHE_CHECK([for MSG_DONTWAIT], [ac_cv_msg_dontwait], [
+    AC_LANG_PUSH([C])
+    save_CFLAGS="$CFLAGS"
+    CFLAGS="$CFLAGS -I${srcdir}"
+    AC_TRY_LINK([
+#include <sys/socket.h>
+                   ], [
+int flags= MSG_DONTWAIT;
+                   ],
+                   [ ac_cv_msg_dontwait=yes ],
+                   [ ac_cv_msg_dontwait=no ])
+   CFLAGS="$save_CFLAGS"
+   AC_LANG_POP
+  ])
+
+  AS_IF([test "x$ac_cv_msg_nosignal" = "xyes"],[
+        AC_DEFINE(HAVE_MSG_NOSIGNAL, 1, [Define to 1 if you have a MSG_NOSIGNAL])])
+  AS_IF([test "x$ac_cv_msg_dontwait" = "xyes"],[
+        AC_DEFINE(HAVE_MSG_DONTWAIT, 1, [Define to 1 if you have a MSG_DONTWAIT])])
+])
+
+dnl ---------------------------------------------------------------------------
+dnl End Macro: SOCKET_SEND_FLAGS
+dnl ---------------------------------------------------------------------------