Test for a working SO_SNDTIMEO and SO_RCVTIMEO during configure
authorTrond Norbye <trond.norbye@sun.com>
Tue, 6 Jan 2009 14:46:41 +0000 (15:46 +0100)
committerTrond Norbye <trond.norbye@sun.com>
Tue, 6 Jan 2009 14:46:41 +0000 (15:46 +0100)
config/setsockopt.m4 [new file with mode: 0644]
configure.ac
libmemcached/memcached_connect.c

diff --git a/config/setsockopt.m4 b/config/setsockopt.m4
new file mode 100644 (file)
index 0000000..f1115d3
--- /dev/null
@@ -0,0 +1,53 @@
+dnl ---------------------------------------------------------------------------
+dnl Macro: SETSOCKOPT_TEST
+dnl ---------------------------------------------------------------------------
+AC_LANG(C)
+AC_RUN_IFELSE([ 
+   AC_LANG_PROGRAM([
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <time.h>
+#include <errno.h>
+   ], [
+     int sock = socket(AF_INET, SOCK_STREAM, 0);
+     struct timeval waittime;
+   
+     waittime.tv_sec= 0;
+     waittime.tv_usec= 500;
+   
+     if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, 
+                    &waittime, (socklen_t)sizeof(struct timeval)) == -1) {
+       if (errno == ENOPROTOOPT) {
+         return 1;
+       }
+     }
+     return 0;
+   ])
+   ], AC_DEFINE(HAVE_SNDTIMEO, 1, [Define to 1 if you have a working SO_SNDTIMEO])) 
+
+AC_RUN_IFELSE([ 
+   AC_LANG_PROGRAM([
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <time.h>
+#include <errno.h>
+   ], [
+     int sock = socket(AF_INET, SOCK_STREAM, 0);
+     struct timeval waittime;
+   
+     waittime.tv_sec= 0;
+     waittime.tv_usec= 500;
+   
+     if (setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, 
+                    &waittime, (socklen_t)sizeof(struct timeval)) == -1) {
+       if (errno == ENOPROTOOPT) {
+         return 1;
+       }
+     }
+     return 0;
+   ])
+   ], AC_DEFINE(HAVE_RCVTIMEO, 1, [Define to 1 if you have a working SO_RCVTIMEO])) 
+
+dnl ---------------------------------------------------------------------------
+dnl End Macro: SETSOCKOPT_TEST
+dnl ---------------------------------------------------------------------------
index 621ed0dfde826dee2780b8b578390f38f23c1536..36f1162eb64a909b8d2e6376f5f0cf8ad45660b9 100644 (file)
@@ -84,4 +84,7 @@ AC_TYPE_SIZE_T
 AC_SEARCH_LIBS(getopt_long, gnugetopt)
 AC_SEARCH_LIBS(socket, socket)
 AC_SEARCH_LIBS(gethostbyname, nsl)
+
+sinclude(config/setsockopt.m4)
+
 AC_OUTPUT(Makefile clients/Makefile tests/Makefile docs/Makefile libmemcached/Makefile support/Makefile support/libmemcached.pc support/libmemcached.spec)
index c5157629670fddd9daa7b29deb5a5200fd3ceaf6..ca35420066582efcf7d62cc18e24845ca4921fa8 100644 (file)
@@ -51,7 +51,7 @@ static memcached_return set_socket_options(memcached_server_st *ptr)
   if (ptr->type == MEMCACHED_CONNECTION_UDP)
     return MEMCACHED_SUCCESS;
 
-#ifndef __sun
+#ifdef HAVE_SNDTIMEO
   if (ptr->root->snd_timeout)
   {
     int error;
@@ -64,7 +64,9 @@ static memcached_return set_socket_options(memcached_server_st *ptr)
                       &waittime, (socklen_t)sizeof(struct timeval));
     WATCHPOINT_ASSERT(error == 0);
   }
+#endif
 
+#ifdef HAVE_RCVTIMEO
   if (ptr->root->rcv_timeout)
   {
     int error;