mturk       2005/02/25 00:26:03

  Modified:    jk/native configure.in
               jk/native/common jk_connect.c
  Log:
  Add SO_RCVTIMEO for unixes.
  
  Revision  Changes    Path
  1.39      +40 -3     jakarta-tomcat-connectors/jk/native/configure.in
  
  Index: configure.in
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/configure.in,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- configure.in      13 Feb 2005 13:05:15 -0000      1.38
  +++ configure.in      25 Feb 2005 08:26:03 -0000      1.39
  @@ -52,11 +52,48 @@
   
   dnl check for snprintf and vsnprintf.
   AC_CHECK_FUNC(snprintf, AC_DEFINE(HAVE_SNPRINTF,1,[Have snprintf()]))
  -
   AC_CHECK_FUNC(vsnprintf, AC_DEFINE(HAVE_VSNPRINTF,1,[Have vsnprintf()]))
  -
  +dnl check for flock function.
   AC_CHECK_FUNC(flock, AC_DEFINE(HAVE_FLOCK,1,[Have flock()]))
   
  +AC_DEFUN(JK_CHECK_SETSOCKOPT, [
  +AC_MSG_CHECKING(whether to use $1 with setsockopt())
  +AC_TRY_RUN([
  +#include <sys/types.h>
  +#include <sys/socket.h>
  +#include <sys/time.h>
  +
  +int main(void)
  +{
  +    int s;
  +    struct timeval tv;
  +    tv.tv_sec  = 3;
  +    tv.tv_usec = 0;
  +
  +#ifndef $1
  +    exit(3);
  +#else
  +    if ((s = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  +        exit(2);
  +
  +    /* fails on Solaris 2.6,8,9,10 and some Linuxes because
  +       SO_RCVTIMEO|SO_SNDTIMEO are defined but not implemented */
  +    if (setsockopt(s, SOL_SOCKET, $1, (const void *)&tv, sizeof(tv)) == -1)
  +        exit(1);
  +
  +    exit(0);
  +#endif
  +}
  +]
  +, [ AC_MSG_RESULT([yes]) AC_DEFINE(USE_$1, 1, [Define to use $1 with 
setsockopt()]) ]
  +, [ AC_MSG_RESULT([no]) ]
  +)
  +])dnl
  +
  +dnl check for SO_RCVTIMEO and SO_SNDTIMEO
  +JK_CHECK_SETSOCKOPT(SO_RCVTIMEO)
  +JK_CHECK_SETSOCKOPT(SO_SNDTIMEO)
  +
   APACHE_CONFIG_VARS=`pwd`/scripts/build/config_vars.mk
   WEBSERVER=""
   apache_dir=""
  
  
  
  1.46      +19 -9     jakarta-tomcat-connectors/jk/native/common/jk_connect.c
  
  Index: jk_connect.c
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-connectors/jk/native/common/jk_connect.c,v
  retrieving revision 1.45
  retrieving revision 1.46
  diff -u -r1.45 -r1.46
  --- jk_connect.c      21 Feb 2005 11:18:48 -0000      1.45
  +++ jk_connect.c      25 Feb 2005 08:26:03 -0000      1.46
  @@ -198,14 +198,20 @@
       }
   
       if (timeout > 0) {
  -#ifdef WIN32
  +#if defined(WIN32)
           timeout = timeout * 1000;
           setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,
  -                   (char *) &timeout, sizeof(int));
  +                   (const char *) &timeout, sizeof(int));
           setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO,
  -                   (char *) &timeout, sizeof(int));
  -#else
  -        /* TODO: How to set the timeout for other platforms? */
  +                   (const char *) &timeout, sizeof(int));
  +#elif defined(SO_RCVTIMEO) && defined(USE_SO_RCVTIMEO) && 
defined(SO_SNDTIMEO) && defined(USE_SO_SNDTIMEO) 
  +        struct timeval tv;
  +        tv.tv_sec  = timeout;
  +        tv.tv_usec = 0;
  +        setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,
  +                   (const void *) &tv, sizeof(tv));
  +        setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO,
  +                   (const void *) &tv, sizeof(tv));
   #endif
           if (JK_IS_DEBUG_LEVEL(l))
               jk_log(l, JK_LOG_DEBUG,
  @@ -446,7 +452,8 @@
   {
       fd_set fd;
       struct timeval tv;
  - 
  +    int rc;
  +
       FD_ZERO(&fd);
       FD_SET(sd, &fd);
   
  @@ -455,11 +462,14 @@
       tv.tv_usec = 1;
   
       /* If we get a timeout, then we are still connected */
  -    if (select(1, &fd, NULL, NULL, &tv) == 0)
  +    if ((rc = select(1, &fd, NULL, NULL, &tv)) == 0)
           return 1;
       else {
   #if defined(WIN32) || (defined(NETWARE) && defined(__NOVELL_LIBC__))
  -        errno = WSAGetLastError() - WSABASEERR;
  +        if (rc == SOCKET_ERROR)
  +            errno = WSAGetLastError() - WSABASEERR;
  +        else
  +            errno = 0;
   #endif
           return 0;
       }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to