Skip to content

Commit

Permalink
Detect the availability of MSG_NOSIGNAL/MSG_DONTWAIT
Browse files Browse the repository at this point in the history
  • Loading branch information
trondn committed Mar 1, 2011
1 parent 493ed31 commit b9bd7be
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 4 deletions.
10 changes: 10 additions & 0 deletions configure.ac
Expand Up @@ -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
])

Expand Down Expand Up @@ -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
Expand Down
4 changes: 0 additions & 4 deletions libmemcached/io.c
Expand Up @@ -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();
Expand Down
49 changes: 49 additions & 0 deletions m4/socket_send_flags.m4
@@ -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.