Commit:    b3effa60c73922ddf4a7df3be3a0e4e5ca47f70d
Author:    Gustavo Lopes <glo...@nebm.ist.utl.pt>         Tue, 23 Oct 2012 
13:09:38 +0200
Parents:   17540788ad8c25969f1dbd02c1a3b75a8417fe9c
Branches:  PHP-5.5 master

Link:       
http://git.php.net/?p=php-src.git;a=commitdiff;h=b3effa60c73922ddf4a7df3be3a0e4e5ca47f70d

Log:
Improve imported socket family detection

Also added constant SO_FAMILY.

Changed paths:
  M  ext/sockets/sockets.c


Diff:
diff --git a/ext/sockets/sockets.c b/ext/sockets/sockets.c
index b213b0a..863825d 100644
--- a/ext/sockets/sockets.c
+++ b/ext/sockets/sockets.c
@@ -748,6 +748,9 @@ PHP_MINIT_FUNCTION(sockets)
        REGISTER_LONG_CONSTANT("SO_SNDTIMEO",   SO_SNDTIMEO,    CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("SO_RCVTIMEO",   SO_RCVTIMEO,    CONST_CS | 
CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("SO_TYPE",               SO_TYPE,                
CONST_CS | CONST_PERSISTENT);
+#ifdef SO_FAMILY
+       REGISTER_LONG_CONSTANT("SO_FAMILY",             SO_FAMILY,              
CONST_CS | CONST_PERSISTENT);
+#endif
        REGISTER_LONG_CONSTANT("SO_ERROR",              SO_ERROR,               
CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("SOL_SOCKET",    SOL_SOCKET,             
CONST_CS | CONST_PERSISTENT);
        REGISTER_LONG_CONSTANT("SOMAXCONN",             SOMAXCONN,              
CONST_CS | CONST_PERSISTENT);
@@ -2436,6 +2439,10 @@ PHP_FUNCTION(socket_import_stream)
 #ifndef PHP_WIN32
        int                                      t;
 #endif
+#ifdef SO_DOMAIN
+       int                                     type;
+       socklen_t                       type_len = sizeof(type);
+#endif
 
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstream) == 
FAILURE) {
                return;
@@ -2452,6 +2459,11 @@ PHP_FUNCTION(socket_import_stream)
        retsock->bsd_socket = socket;
 
        /* determine family */
+#ifdef SO_DOMAIN
+       if (getsockopt(socket, SOL_SOCKET, SO_DOMAIN, &type, &type_len) == 0) {
+               retsock->type = type;
+       } else
+#endif
        if (getsockname(socket, (struct sockaddr*)&addr, &addr_len) == 0) {
                retsock->type = addr.ss_family;
        } else {


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

Reply via email to