cataphract Thu, 17 Mar 2011 15:36:52 +0000 Revision: http://svn.php.net/viewvc?view=revision&revision=309350
Log: - Merged fix for bug #51958 socket_accept() fails on IPv6 server sockets. See r309238 for commit in trunk. Bug: http://bugs.php.net/51958 (error getting bug information) Changed paths: U php/php-src/branches/PHP_5_3/NEWS U php/php-src/branches/PHP_5_3/ext/sockets/sockets.c A php/php-src/branches/PHP_5_3/ext/sockets/tests/bug51958.phpt Modified: php/php-src/branches/PHP_5_3/NEWS =================================================================== --- php/php-src/branches/PHP_5_3/NEWS 2011-03-17 15:27:15 UTC (rev 309349) +++ php/php-src/branches/PHP_5_3/NEWS 2011-03-17 15:36:52 UTC (rev 309350) @@ -17,6 +17,9 @@ . Fixed bug #54167 (PDO_DBLIB returns null on SQLUNIQUE field). (mjh at hodginsmedia dot com, Felipe) +- Sockets extension + . Fixed bug #51958 (socket_accept() fails on IPv6 server sockets). (Gustavo) + 17 Mar 2011, PHP 5.3.6 - Upgraded bundled Sqlite3 to version 3.7.4. (Ilia) - Upgraded bundled PCRE to version 8.11. (Ilia) Modified: php/php-src/branches/PHP_5_3/ext/sockets/sockets.c =================================================================== --- php/php-src/branches/PHP_5_3/ext/sockets/sockets.c 2011-03-17 15:27:15 UTC (rev 309349) +++ php/php-src/branches/PHP_5_3/ext/sockets/sockets.c 2011-03-17 15:36:52 UTC (rev 309350) @@ -394,16 +394,13 @@ } /* }}} */ -static int php_accept_connect(php_socket *in_sock, php_socket **new_sock, struct sockaddr *la TSRMLS_DC) /* {{{ */ +static int php_accept_connect(php_socket *in_sock, php_socket **new_sock, struct sockaddr *la, socklen_t *la_len TSRMLS_DC) /* {{{ */ { - socklen_t salen; php_socket *out_sock = (php_socket*)emalloc(sizeof(php_socket)); *new_sock = out_sock; - salen = sizeof(*la); - out_sock->blocking = 1; - out_sock->bsd_socket = accept(in_sock->bsd_socket, la, &salen); + out_sock->bsd_socket = accept(in_sock->bsd_socket, la, la_len); if (IS_INVALID_SOCKET(out_sock)) { PHP_SOCKET_ERROR(out_sock, "unable to accept incoming connection", errno); @@ -411,6 +408,10 @@ return 0; } + out_sock->error = 0; + out_sock->blocking = 1; + out_sock->type = la->sa_family; + return 1; } /* }}} */ @@ -880,9 +881,10 @@ Accepts a connection on the listening socket fd */ PHP_FUNCTION(socket_accept) { - zval *arg1; - php_socket *php_sock, *new_sock; - struct sockaddr_in sa; + zval *arg1; + php_socket *php_sock, *new_sock; + php_sockaddr_storage sa; + socklen_t sa_len = sizeof(sa); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE) { return; @@ -890,13 +892,10 @@ ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket); - if (!php_accept_connect(php_sock, &new_sock, (struct sockaddr *) &sa TSRMLS_CC)) { + if (!php_accept_connect(php_sock, &new_sock, (struct sockaddr*)&sa, &sa_len TSRMLS_CC)) { RETURN_FALSE; } - new_sock->error = 0; - new_sock->blocking = 1; - ZEND_REGISTER_RESOURCE(return_value, new_sock, le_socket); } /* }}} */ Added: php/php-src/branches/PHP_5_3/ext/sockets/tests/bug51958.phpt =================================================================== --- php/php-src/branches/PHP_5_3/ext/sockets/tests/bug51958.phpt (rev 0) +++ php/php-src/branches/PHP_5_3/ext/sockets/tests/bug51958.phpt 2011-03-17 15:36:52 UTC (rev 309350) @@ -0,0 +1,22 @@ +--TEST-- +Bug #51958: socket_accept() fails on IPv6 server sockets +--SKIPIF-- +<?php +if (!extension_loaded('sockets')) { + die('skip sockets extension not available.'); +} +if (!defined('IPPROTO_IPV6')) { + die('skip IPv6 not available.'); +} +if (PHP_OS != "WINNT") + die('skip test relies Winsock's error code for WSAEWOULDBLOCK/EAGAIN'); +--FILE-- +<?php +$listenfd = socket_create(AF_INET6, SOCK_STREAM, SOL_TCP); +socket_bind($listenfd, "::1", 13579); +socket_listen($listenfd); +socket_set_nonblock($listenfd); +$connfd = @socket_accept($listenfd); +echo socket_last_error(); +--EXPECT-- +10035
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php