mike            Thu Nov  3 10:01:31 2005 EDT

  Modified files:              
    /php-src/ext/sockets        sockets.c 
  Log:
  - MFB44: #34851 (SO_RECVTIMEO and SO_SNDTIMEO socket options expect integer
    parameter on Windows)
  
http://cvs.php.net/diff.php/php-src/ext/sockets/sockets.c?r1=1.171&r2=1.172&ty=u
Index: php-src/ext/sockets/sockets.c
diff -u php-src/ext/sockets/sockets.c:1.171 php-src/ext/sockets/sockets.c:1.172
--- php-src/ext/sockets/sockets.c:1.171 Wed Aug  3 10:07:52 2005
+++ php-src/ext/sockets/sockets.c       Thu Nov  3 10:01:31 2005
@@ -19,7 +19,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: sockets.c,v 1.171 2005/08/03 14:07:52 sniper Exp $ */
+/* $Id: sockets.c,v 1.172 2005/11/03 15:01:31 mike Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -1504,6 +1504,7 @@
        zval                    *arg1;
        struct linger   linger_val;
        struct timeval          tv;
+       int                             timeout = 0;
        socklen_t               optlen;
        php_socket              *php_sock;
        int                             other_val;
@@ -1531,12 +1532,24 @@
                        break; 
                case SO_RCVTIMEO:
                case SO_SNDTIMEO:
+#ifndef PHP_WIN32
                        optlen = sizeof(tv);
 
                        if (getsockopt(php_sock->bsd_socket, level, optname, 
(char*)&tv, &optlen) != 0) {
                                PHP_SOCKET_ERROR(php_sock, "unable to retrieve 
socket option", errno);
                                RETURN_FALSE;
                        }
+#else
+                       optlen = sizeof(int);
+                       
+                       if (getsockopt(php_sock->bsd_socket, level, optname, 
(char*)&timeout, &optlen) != 0) {
+                               PHP_SOCKET_ERROR(php_sock, "unable to retrieve 
socket option", errno);
+                               RETURN_FALSE;
+                       }
+                       
+                       tv.tv_sec = timeout ? timeout / 1000 : 0;
+                       tv.tv_usec = timeout ? (timeout * 1000) % 1000000 : 0;
+#endif
 
                        array_init(return_value);
                        
@@ -1566,7 +1579,7 @@
        struct linger   lv;
        struct timeval tv;
        php_socket              *php_sock;
-       int                             ov, optlen, retval;
+       int                             ov, optlen, retval, timeout;
        long                            level, optname;
        void                    *opt_ptr;
        
@@ -1626,11 +1639,16 @@
                        
                        convert_to_long_ex(sec);
                        convert_to_long_ex(usec);
+#ifndef PHP_WIN32
                        tv.tv_sec = Z_LVAL_PP(sec);
                        tv.tv_usec = Z_LVAL_PP(usec);
-
                        optlen = sizeof(tv);
                        opt_ptr = &tv;
+#else
+                       timeout = Z_LVAL_PP(sec) * 1000 + Z_LVAL_PP(usec) / 
1000;
+                       optlen = sizeof(int);
+                       opt_ptr = &timeout;
+#endif
                        break;
                default:
                        convert_to_long_ex(&arg4);

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to