X-Git-Url: http://www.privoxy.org/gitweb/?a=blobdiff_plain;f=jbsockets.c;h=f7443ec90779e891fd7862ad20f47187e97df0c2;hb=a54cb7d58d243d60158fe414d205d658e9e1a7a2;hp=d601fb2d5ba5de8d6d624fdbb4b27619617639c6;hpb=d90684bd0e048383d4b5d4cb5475b69e497b72b7;p=privoxy.git diff --git a/jbsockets.c b/jbsockets.c index d601fb2d..f7443ec9 100644 --- a/jbsockets.c +++ b/jbsockets.c @@ -1,4 +1,4 @@ -const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.47 2008/03/26 18:07:07 fabiankeil Exp $"; +const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.49 2008/11/10 17:03:57 fabiankeil Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $ @@ -35,6 +35,13 @@ const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.47 2008/03/26 18:07:07 fabian * * Revisions : * $Log: jbsockets.c,v $ + * Revision 1.49 2008/11/10 17:03:57 fabiankeil + * Fix a gcc44 warning and remove a now-obsolete cast. + * + * Revision 1.48 2008/09/04 08:13:58 fabiankeil + * Prepare for critical sections on Windows by adding a + * layer of indirection before the pthread mutex functions. + * * Revision 1.47 2008/03/26 18:07:07 fabiankeil * Add hostname directive. Closes PR#1918189. * @@ -335,7 +342,7 @@ const char jbsockets_h_rcs[] = JBSOCKETS_H_VERSION; * * Parameters : * 1 : host = hostname to connect to - * 2 : portnum = port to connent on + * 2 : portnum = port to connent on (XXX: should be unsigned) * 3 : csp = Current client state (buffers, headers, etc...) * Not modified, only used for source IP and ACL. * @@ -347,7 +354,7 @@ jb_socket connect_to(const char *host, int portnum, struct client_state *csp) { struct sockaddr_in inaddr; jb_socket fd; - int addr; + unsigned int addr; fd_set wfds; struct timeval tv[1]; #if !defined(_WIN32) && !defined(__BEOS__) && !defined(AMIGA) @@ -367,7 +374,7 @@ jb_socket connect_to(const char *host, int portnum, struct client_state *csp) } #ifdef FEATURE_ACL - dst->addr = ntohl((unsigned long) addr); + dst->addr = ntohl(addr); dst->port = portnum; if (block_acl(dst, csp)) @@ -579,6 +586,46 @@ int read_socket(jb_socket fd, char *buf, int len) } +/********************************************************************* + * + * Function : data_is_available + * + * Description : Waits for data to arrive on a socket. + * + * Parameters : + * 1 : fd = file descriptor of the socket to read + * 2 : seconds_to_wait = number of seconds after which we give up. + * + * Returns : TRUE if data arrived in time, + * FALSE otherwise. + * + *********************************************************************/ +int data_is_available(jb_socket fd, int seconds_to_wait) +{ + fd_set rfds; + struct timeval timeout; + int n; + + memset(&timeout, 0, sizeof(timeout)); + timeout.tv_sec = seconds_to_wait; + +#ifdef __OS2__ + /* Copy and pasted from jcc.c ... */ + memset(&rfds, 0, sizeof(fd_set)); +#else + FD_ZERO(&rfds); +#endif + FD_SET(fd, &rfds); + + n = select(fd+1, &rfds, NULL, NULL, &timeout); + + /* + * XXX: Do we care about the different error conditions? + */ + return (n == 1); +} + + /********************************************************************* * * Function : close_socket