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

Reply via email to