X-Git-Url: http://www.privoxy.org/gitweb/?p=privoxy.git;a=blobdiff_plain;f=jbsockets.c;h=58fd66c751d447f9555ef352a2813e6c07e78d0e;hp=19bd879f8be02e076c30fac367e280e8b3db180a;hb=2ff333bc2263da21a67a61f9b9094eb635b4e6f9;hpb=1ef0d7f460d552b714536ca35758b4ff7f039ef5 diff --git a/jbsockets.c b/jbsockets.c index 19bd879f..58fd66c7 100644 --- a/jbsockets.c +++ b/jbsockets.c @@ -1,4 +1,4 @@ -const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.20 2001/11/16 00:48:48 jongfoster Exp $"; +const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.22 2002/03/04 02:08:02 david__schmidt Exp $"; /********************************************************************* * * File : $Source: /cvsroot/ijbswa/current/jbsockets.c,v $ @@ -35,6 +35,12 @@ const char jbsockets_rcs[] = "$Id: jbsockets.c,v 1.20 2001/11/16 00:48:48 jongfo * * Revisions : * $Log: jbsockets.c,v $ + * Revision 1.22 2002/03/04 02:08:02 david__schmidt + * Enable web editing of actions file on OS/2 (it had been broken all this time!) + * + * Revision 1.21 2002/01/09 14:32:33 oes + * Added support for gethostbyname_r and gethostbyaddr_r. + * * Revision 1.20 2001/11/16 00:48:48 jongfoster * Enabling duplicate-socket detection for all platforms, not * just Win32. @@ -317,6 +323,10 @@ int connect_to(const char *host, int portnum, struct client_state *csp) *********************************************************************/ int write_socket(int fd, const char *buf, int len) { +#ifdef __OS2__ +#define SOCKET_SEND_MAX 65000 + int write_len = 0, send_len, send_rc = 0, i = 0; +#endif /* __OS2__ */ if (len <= 0) { return(0); @@ -324,8 +334,25 @@ int write_socket(int fd, const char *buf, int len) log_error(LOG_LEVEL_LOG, "%N", len, buf); -#if defined(_WIN32) || defined(__BEOS__) || defined(AMIGA) || defined(__OS2__) +#if defined(_WIN32) || defined(__BEOS__) || defined(AMIGA) return( send(fd, buf, len, 0)); +#elif defined(__OS2__) + /* + * Break the data up into SOCKET_SEND_MAX chunks for sending... + * OS/2 seemed to complain when the chunks were too large. + */ + while ((i < len) && (send_rc != -1)) + { + if ((i + SOCKET_SEND_MAX) > len) + send_len = len - i; + else + send_len = SOCKET_SEND_MAX; + send_rc = send(fd,(char*)buf + i, send_len, 0); + if (send_rc == -1) + return(0); + i = i + send_len; + } + return len; #else return( write(fd, buf, len)); #endif @@ -419,11 +446,9 @@ int bind_port(const char *hostnam, int portnum) { struct sockaddr_in inaddr; int fd; -#if 0 #ifndef _WIN32 int one = 1; #endif /* ndef _WIN32 */ -#endif memset((char *)&inaddr, '\0', sizeof inaddr); @@ -450,17 +475,18 @@ int bind_port(const char *hostnam, int portnum) return(-1); } -#if 0 #ifndef _WIN32 /* - * FIXME: This is not needed for Win32 - in fact, it stops + * This is not needed for Win32 - in fact, it stops * duplicate instances of JunkBuster from being caught. - * Is this really needed under UNIX, or should it be taked out? - * -- Jon + * + * On UNIX, we assume the user is sensible enough not + * to start JunkBuster multiple times on the same IP. + * Without this, stopping and restarting JunkBuster + * from a script fails. */ setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *)&one, sizeof(one)); #endif /* ndef _WIN32 */ -#endif if (bind (fd, (struct sockaddr *)&inaddr, sizeof(inaddr)) < 0) {