diff options
Diffstat (limited to 'main/network.c')
| -rw-r--r-- | main/network.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/main/network.c b/main/network.c index 99d4ed8437..36181da55d 100644 --- a/main/network.c +++ b/main/network.c @@ -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) { |
