- fix bug #50953, socket will not connect to IPv4 address when the host has both...
authorPierre Joye <pajoye@php.net>
Tue, 7 Sep 2010 09:47:36 +0000 (09:47 +0000)
committerPierre Joye <pajoye@php.net>
Tue, 7 Sep 2010 09:47:36 +0000 (09:47 +0000)
main/network.c

index 99d4ed8437e60c59162fe461d5d06927cc09d969..36181da55d4cedef11856ded1dd8257a22a54417 100644 (file)
@@ -337,9 +337,19 @@ PHPAPI int php_network_connect_socket(php_socket_t sockfd,
        if (n == 0) {
                goto ok;
        }
-
+# ifdef PHP_WIN32
+       /* The documentation for connect() says in case of non-blocking connections
+        * the select function reports success in the writefds set and failure in
+        * the exceptfds set. Indeed, using PHP_POLLREADABLE results in select
+        * failing only due to the timeout and not immediately as would be
+        * exepected when a connection is actively refused. This way,
+        * php_pollfd_for will return a mask with POLLOUT if the connection
+        * is successful and with POLLPRI otherwise. */
+       if ((n = php_pollfd_for(sockfd, POLLOUT|POLLPRI, timeout)) == 0) {
+#else
        if ((n = php_pollfd_for(sockfd, PHP_POLLREADABLE|POLLOUT, timeout)) == 0) {
                error = PHP_TIMEOUT_ERROR_VALUE;
+#endif
        }
 
        if (n > 0) {