You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by tr...@locus.apache.org on 2000/04/28 03:35:16 UTC

cvs commit: apache-2.0/src/lib/apr/network_io/win32 sockets.c poll.c

trawick     00/04/27 18:35:16

  Modified:    src/lib/apr/network_io/win32 sockets.c poll.c
  Log:
  APR on Win32:
  Fix some return code problems (APR_EEXIST, errno, etc.).
  Integrate the Win32 part of Chia-liang Kao's latest patch
  for ap_poll et al.
  Get rid of some unnecessary argument checking.
  
  Revision  Changes    Path
  1.27      +11 -26    apache-2.0/src/lib/apr/network_io/win32/sockets.c
  
  Index: sockets.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/sockets.c,v
  retrieving revision 1.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- sockets.c	2000/04/19 21:17:39	1.26
  +++ sockets.c	2000/04/28 01:35:15	1.27
  @@ -87,13 +87,16 @@
       (*new)->remote_addr = (struct sockaddr_in *)ap_palloc((*new)->cntxt,
                             sizeof(struct sockaddr_in));
   
  -    if ((*new)->local_addr == NULL) {
  +    if (((*new)->local_addr == NULL) || ((*new)->remote_addr == NULL)) {
           return APR_ENOMEM;
       }
       /* For right now, we are not using socket groups.  We may later.
        * No flags to use when creating a socket, so use 0 for that parameter as well.
        */
       (*new)->sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  +    if ((*new)->sock == INVALID_SOCKET) {
  +        return WSAGetLastError();
  +    }
   
       (*new)->local_addr->sin_family = AF_INET;
   
  @@ -101,9 +104,6 @@
   
       (*new)->local_addr->sin_port = 0;   
    
  -    if ((*new)->sock == INVALID_SOCKET) {
  -        return APR_EEXIST;
  -    }
       ap_register_cleanup((*new)->cntxt, (void *)(*new), 
                           socket_cleanup, ap_null_cleanup);
       return APR_SUCCESS;
  @@ -131,7 +131,7 @@
           return APR_SUCCESS;
       }
       else {
  -        return APR_EEXIST;
  +        return WSAGetLastError();
       }
   }
   
  @@ -144,7 +144,7 @@
   ap_status_t ap_bind(ap_socket_t *sock)
   {
       if (bind(sock->sock, (struct sockaddr *)sock->local_addr, sock->addr_len) == -1) {
  -        return errno;
  +        return WSAGetLastError();
       }
       else
           return APR_SUCCESS;
  @@ -153,7 +153,7 @@
   ap_status_t ap_listen(ap_socket_t *sock, ap_int32_t backlog)
   {
       if (listen(sock->sock, backlog) == SOCKET_ERROR)
  -        return APR_EEXIST;
  +        return WSAGetLastError();
       else
           return APR_SUCCESS;
   }
  @@ -176,7 +176,7 @@
                           &(*new)->addr_len);
   
       if ((*new)->sock == INVALID_SOCKET) {
  -        return errno;
  +        return WSAGetLastError();
       }
       
       ap_register_cleanup((*new)->cntxt, (void *)(*new), 
  @@ -201,7 +201,7 @@
       else {
           hp = gethostbyname(hostname);
           if (!hp)  {
  -            return (WSAGetLastError() + APR_OS_START_SYSERR);
  +            return WSAGetLastError();
           }
           memcpy((char *)&sock->remote_addr->sin_addr, hp->h_addr_list[0], hp->h_length);
           sock->addr_len = sizeof(*sock->remote_addr);
  @@ -228,32 +228,17 @@
   
   ap_status_t ap_get_socketdata(void **data, char *key, ap_socket_t *socket)
   {
  -    if (socket != NULL) {
  -        return ap_get_userdata(data, key, socket->cntxt);
  -    }
  -    else {
  -        data = NULL;
  -        return APR_ENOSOCKET;
  -    }
  +    return ap_get_userdata(data, key, socket->cntxt);
   }
   
   ap_status_t ap_set_socketdata(ap_socket_t *socket, void *data, char *key, 
                                 ap_status_t (*cleanup) (void *))
   {
  -    if (socket != NULL) {
  -        return ap_set_userdata(data, key, cleanup, socket->cntxt);
  -    }
  -    else {
  -        data = NULL;
  -        return APR_ENOSOCKET;
  -    }
  +    return ap_set_userdata(data, key, cleanup, socket->cntxt);
   }
   
   ap_status_t ap_get_os_sock(ap_os_sock_t *thesock, ap_socket_t *sock)
   {
  -    if (sock == NULL) {
  -        return APR_ENOSOCKET;
  -    }
       *thesock = sock->sock;
       return APR_SUCCESS;
   }
  
  
  
  1.14      +8 -3      apache-2.0/src/lib/apr/network_io/win32/poll.c
  
  Index: poll.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/win32/poll.c,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- poll.c	2000/04/16 02:27:53	1.13
  +++ poll.c	2000/04/28 01:35:15	1.14
  @@ -218,15 +218,15 @@
       }
   }
   
  -ap_status_t ap_remove_poll_socket(ap_pollfd_t *aprset, 
  -                                  ap_socket_t *sock, ap_int16_t events)
  +ap_status_t ap_mask_poll_socket(ap_pollfd_t *aprset, 
  +                                ap_socket_t *sock, ap_int16_t events)
   {
       if (events & APR_POLLIN) {
           FD_CLR(sock->sock, aprset->read);
           aprset->numread--;
       }
       if (events & APR_POLLPRI) {
  -        FD_CLR(sock->sock, aprset->read);
  +        FD_CLR(sock->sock, aprset->except);
           aprset->numexcept--;
       }
       if (events & APR_POLLOUT) {
  @@ -234,6 +234,11 @@
           aprset->numwrite--;
       }
       return APR_SUCCESS;
  +}
  +
  +ap_status_t ap_remove_poll_socket(ap_pollfd_t *aprset, ap_socket_t *sock)
  +{
  +    return ap_mask_poll_socket(aprset, sock, ~0);
   }
   
   ap_status_t ap_clear_poll_sockets(ap_pollfd_t *aprset, ap_int16_t events)