Permalink
Browse files

Detect the availability of MSG_NOSIGNAL/MSG_DONTWAIT

  • Loading branch information...
1 parent 493ed31 commit b9bd7be25730b33f1cc91bb171402b548af79d5b @trondn committed Mar 1, 2011
Showing with 59 additions and 4 deletions.
  1. +10 −0 configure.ac
  2. +0 −4 libmemcached/io.c
  3. +49 −0 m4/socket_send_flags.m4
View
@@ -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
View
@@ -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();
@@ -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 ---------------------------------------------------------------------------

0 comments on commit b9bd7be

Please sign in to comment.