cvs: php4 /ext/sockets php_sockets.h sockets.c

From: Date: Mon, 29 Apr 2002 14:52:30 +0000
Subject: cvs: php4 /ext/sockets php_sockets.h sockets.c
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-11523@lists.php.net to get a copy of this message
mfischer Mon Apr 29 10:52:30 2002 EDT Modified files: /php4/ext/sockets php_sockets.h sockets.c Log: - Store last errno in the module global 'last_error' implicitely - Set the global 'last_error' explicitely for functions which can't return an error withing a single socket context (socket_create and socket_select) - Modified socket_last_error() to return global modules last error if no socket resource is given - Added a couple of more E_WARNING messages in case something goes foobar so the user isn't left alone in the dark. Index: php4/ext/sockets/php_sockets.h diff -u php4/ext/sockets/php_sockets.h:1.22 php4/ext/sockets/php_sockets.h:1.23 --- php4/ext/sockets/php_sockets.h:1.22 Wed Mar 6 15:19:09 2002 +++ php4/ext/sockets/php_sockets.h Mon Apr 29 10:52:29 2002 @@ -22,7 +22,7 @@ #ifndef PHP_SOCKETS_H #define PHP_SOCKETS_H -/* $Id: php_sockets.h,v 1.22 2002/03/06 20:19:09 jason Exp $ */ +/* $Id: php_sockets.h,v 1.23 2002/04/29 14:52:29 mfischer Exp $ */ #if HAVE_SOCKETS @@ -102,12 +102,14 @@ int accept_connect(php_socket *in_sock, php_socket **new_sock, struct sockaddr *la TSRMLS_DC); int php_read(int bsd_socket, void *buf, int maxlen); +ZEND_BEGIN_MODULE_GLOBALS(sockets) + int last_error; +ZEND_END_MODULE_GLOBALS(sockets) + #ifdef ZTS -#define SOCKETSG(v) (sockets_globals->v) -#define SOCKETSLS_FETCH() php_sockets_globals *sockets_globals = ts_resource(sockets_globals_id) +#define SOCKETS_G(v) TSRMG(sockets_globals_id, zend_sockets_globals *, v) #else -#define SOCKETSG(v) (sockets_globals.v) -#define SOCKETSLS_FETCH() +#define SOCKETS_G(v) (sockets_globals.v) #endif #else Index: php4/ext/sockets/sockets.c diff -u php4/ext/sockets/sockets.c:1.98 php4/ext/sockets/sockets.c:1.99 --- php4/ext/sockets/sockets.c:1.98 Sun Mar 10 20:24:42 2002 +++ php4/ext/sockets/sockets.c Mon Apr 29 10:52:29 2002 @@ -19,7 +19,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: sockets.c,v 1.98 2002/03/11 01:24:42 jason Exp $ */ +/* $Id: sockets.c,v 1.99 2002/04/29 14:52:29 mfischer Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -62,12 +62,7 @@ # define IS_INVALID_SOCKET(a) (a->bsd_socket == INVALID_SOCKET) #endif -#ifdef ZTS -int sockets_globals_id; -#else -php_sockets_globals sockets_globals; -#endif - +ZEND_DECLARE_MODULE_GLOBALS(sockets) #ifndef MSG_WAITALL #ifdef LINUX @@ -90,7 +85,9 @@ #define PHP_BINARY_READ 0x0002 #define PHP_SOCKET_ERROR(socket,msg,errn) socket->error = errn; \ - php_error(E_WARNING, "%s() %s [%d]: %s", get_active_function_name(TSRMLS_C), msg, errn, php_strerror(errn)) + SOCKETS_G(last_error) = errn; \ + php_error(E_WARNING, "%s() %s [%d]: %s", \ + get_active_function_name(TSRMLS_C), msg, errn, php_strerror(errn)) static int le_iov; #define le_iov_name "Socket I/O vector" @@ -374,12 +371,20 @@ return 1; } + +static void php_sockets_init_globals(zend_sockets_globals *sockets_globals TSRMLS_DC) +{ + sockets_globals->last_error = 0; +} + /* {{{ PHP_MINIT_FUNCTION */ PHP_MINIT_FUNCTION(sockets) { struct protoent *pe; + ZEND_INIT_MODULE_GLOBALS(sockets, php_sockets_init_globals, NULL); + le_socket = zend_register_list_destructors_ex(destroy_socket, NULL, le_socket_name, module_number); le_iov = zend_register_list_destructors_ex(destroy_iovec, NULL, le_iov_name, module_number); @@ -526,6 +531,7 @@ retval = select(max_fd+1, &rfds, &wfds, &efds, tv_p); if (retval == -1) { + SOCKETS_G(last_error) = errno; php_error(E_WARNING, "%s() %s [%d]: %s", get_active_function_name(TSRMLS_C), "unable to select", errno, php_strerror(errno)); RETURN_FALSE; } @@ -570,6 +576,8 @@ ZEND_FETCH_RESOURCE(php_sock, php_socket *, &arg1, -1, le_socket_name, le_socket); if (!accept_connect(php_sock, &new_sock, (struct sockaddr *) &sa TSRMLS_CC)) { + php_error(E_WARNING, "%s() unable to accept socket connection [%d]: %s", + get_active_function_name(TSRMLS_C), errno, php_strerror(errno)); RETURN_FALSE; } @@ -798,6 +806,8 @@ RETURN_TRUE; default: + php_error(E_WARNING, "%s() Unsupported address family %d", + get_active_function_name(TSRMLS_C), sa->sa_family); RETURN_FALSE; } } @@ -854,6 +864,8 @@ RETURN_TRUE; default: + php_error(E_WARNING, "%s() Unsupported address family %d", + get_active_function_name(TSRMLS_C), sa->sa_family); RETURN_FALSE; } } @@ -885,6 +897,9 @@ php_sock->type = arg1; if (IS_INVALID_SOCKET(php_sock)) { + SOCKETS_G(last_error) = errno; + php_error(E_WARNING, "%s() Unable to create socket [%d]: %s", + get_active_function_name(TSRMLS_C), errno, php_strerror(errno)); efree(php_sock); RETURN_FALSE; } @@ -912,6 +927,8 @@ switch(php_sock->type) { case AF_INET: if (ZEND_NUM_ARGS() != 3) { + php_error(E_WARNING, "%s() Socket of type AF_INET requires 3 arguments", + get_active_function_name(TSRMLS_C)); RETURN_FALSE; } @@ -932,6 +949,8 @@ break; default: + php_error(E_WARNING, "%s() Unsupported socket type %d", + get_active_function_name(TSRMLS_C), php_sock->type); RETURN_FALSE; } @@ -1370,6 +1389,8 @@ break; default: + php_error(E_WARNING, "%s() Unsupported socket type %d", + get_active_function_name(TSRMLS_C), php_sock->type); RETURN_FALSE; } @@ -1420,6 +1441,8 @@ break; default: + php_error(E_WARNING, "%s() Unsupported socket type %d", + get_active_function_name(TSRMLS_C), php_sock->type); RETURN_FALSE; } @@ -1565,6 +1588,8 @@ } default: + php_error(E_WARNING, "%s() Unsupported address family %d", + get_active_function_name(TSRMLS_C), sa->sa_family); RETURN_FALSE; } } @@ -1649,6 +1674,8 @@ } default: + php_error(E_WARNING, "%s() Unsupported address family %d", + get_active_function_name(TSRMLS_C), sa.sa_family); RETURN_FALSE; } } @@ -1895,19 +1922,19 @@ Returns the last error on the socket */ PHP_FUNCTION(socket_last_error) { - zval *arg1; + zval *arg1 = NULL; php_socket *php_sock; - int error; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE) - return; - - ZEND_FETCH_RESOURCE(php_sock, php_socket*, &arg1, -1, le_socket_name, le_socket); - - error = php_sock->error; + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|r", &arg1) == FAILURE) + return; - RETURN_LONG(error); -} + if (arg1) { + ZEND_FETCH_RESOURCE(php_sock, php_socket*, &arg1, -1, le_socket_name, le_socket); + RETVAL_LONG(php_sock->error); + } else { + RETVAL_LONG(SOCKETS_G(last_error)); + } +} /* }}} */ /* {{{ proto void socket_clear_error(resource socket)

« previous php.cvs (#11523) next »