You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by dr...@locus.apache.org on 2000/06/14 16:01:52 UTC

cvs commit: apache-2.0/src/lib/apr/network_io/beos sockopt.c

dreid       00/06/14 07:01:46

  Modified:    src/lib/apr/network_io/beos sockopt.c
  Log:
  Fix saferead on beos.  The server now works as expected again :)
  
  Revision  Changes    Path
  1.20      +25 -2     apache-2.0/src/lib/apr/network_io/beos/sockopt.c
  
  Index: sockopt.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/network_io/beos/sockopt.c,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- sockopt.c	2000/06/13 16:44:30	1.19
  +++ sockopt.c	2000/06/14 14:01:40	1.20
  @@ -58,9 +58,16 @@
   #else
   #include "networkio.h"
   
  +int setnonblocking(int on, int sock)
  +{
  +    return setsockopt(sock, SOL_SOCKET, SO_NONBLOCK,
  +        &on, sizeof(on));
  +}
  +
   ap_status_t ap_setsocketopt(ap_socket_t *sock, ap_int32_t opt, ap_int32_t on)
   {
       int one;
  +    int rv;
       if (on){
           one = 1;
       }else {
  @@ -80,9 +87,25 @@
           }
       }
       if (opt & APR_SO_NONBLOCK) {
  -    	if (setsockopt(sock->socketdes, SOL_SOCKET, SO_NONBLOCK, &one, sizeof(one)) == -1){
  -    		return errno;
  +    	if ((rv = setnonblocking (one, sock->socketdes)) < 0) {
  +            return errno;
       	}
  +    } 
  +    if (opt & APR_SO_TIMEOUT) { 
  +        if (on > 0 && sock->timeout < 0)
  +            /* we should be in non-blocking mode right now... */
  +            one = 1;
  +        else if (on < 0 && sock->timeout >= 0)
  +            /* they've set a timeout so we should be blocking... */
  +            one = 0;
  +        else if (on == 0)
  +            /* we need to be in nonblocking or this will hang the server */
  +            one = 1;
  +            
  +        if ((rv = setnonblocking (one, sock->socketdes)) < 0)
  +            return rv; 
  +         
  +        sock->timeout = on; 
       } 
       return APR_SUCCESS;
   }