The patch looks good to me, go ahead and apply it.
Thanks, -Jason On Mon, 2002-04-29 at 04:02, Markus Fischer wrote: > Hi, > > attached is the patch I intend to commit later this day: > > - Stores last errno in a module global implicitely > - Sets global last error explicitely for socket_select() and > socket_create() > - 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. > > regards, > - Markus > > On Sun, Apr 28, 2002 at 10:53:42PM -0500, Jason Greene wrote : > > This was something I was planning on adding, but it was not applied to > > the 4.2.0 branch, because it introduces a feature enhancement (storing a > > global last error) and not a bug fix. It is a very simple enhance, I > > just have not had the time to work on it yet. > > > > -Jason > > -- > Please always Cc to me when replying to me on the lists. > GnuPG Key: http://guru.josefine.at/~mfischer/C2272BD0.asc > "Mind if I MFH ?" "What QA did you do on it?" "the usual?" "ah... none :)" > ---- > > ? sockets.diff > Index: php_sockets.h > =================================================================== > RCS file: /repository/php4/ext/sockets/php_sockets.h,v > retrieving revision 1.22 > diff -u -r1.22 php_sockets.h > --- php_sockets.h 6 Mar 2002 20:19:09 -0000 1.22 > +++ php_sockets.h 29 Apr 2002 08:56:25 -0000 > @@ -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: sockets.c > =================================================================== > RCS file: /repository/php4/ext/sockets/sockets.c,v > retrieving revision 1.98 > diff -u -r1.98 sockets.c > --- sockets.c 11 Mar 2002 01:24:42 -0000 1.98 > +++ sockets.c 29 Apr 2002 08:56:25 -0000 > @@ -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) > > ---- > > -- > PHP Development Mailing List <http://www.php.net/> > To unsubscribe, visit: http://www.php.net/unsub.php -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, visit: http://www.php.net/unsub.php