--------------------- PatchSet 1038 Date: 2004/06/27 17:37:22 Author: serassio Branch: nt Tag: (none) Log: Latest socket changes are not compatible with NT 4.0, this fix allow Squid run on it with a whorse stability Members: src/ipc.cc:1.8.2.6->1.8.2.7 src/win32.cc:1.4.2.9->1.4.2.10 Index: squid3/src/ipc.cc =================================================================== RCS file: /cvsroot/squid-sf//squid3/src/ipc.cc,v retrieving revision 1.8.2.6 retrieving revision 1.8.2.7 diff -u -r1.8.2.6 -r1.8.2.7 --- squid3/src/ipc.cc 21 Jun 2004 21:35:05 -0000 1.8.2.6 +++ squid3/src/ipc.cc 27 Jun 2004 17:37:22 -0000 1.8.2.7 @@ -1,6 +1,6 @@ /* - * $Id: ipc.cc,v 1.8.2.6 2004/06/21 21:35:05 serassio Exp $ + * $Id: ipc.cc,v 1.8.2.7 2004/06/27 17:37:22 serassio Exp $ * * DEBUG: section 54 Interprocess Communication * AUTHOR: Duane Wessels @@ -316,8 +316,13 @@ { #ifdef _SQUID_MSWIN_ /* Windows IPC needs Overlapped sockets */ int opt = 0; + int optlen = sizeof(opt); - setsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *) &opt, sizeof(opt)); + if (WIN32_OS_version !=_WIN_OS_WINNT) { + getsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *) &opt, &optlen); + opt = opt & ~(SO_SYNCHRONOUS_NONALERT | SO_SYNCHRONOUS_ALERT); + setsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *) &opt, sizeof(opt)); + } #endif @@ -325,10 +330,11 @@ prfd = pwfd = openASocket (socktype, proto, 0); /* blocking */ #ifdef _SQUID_MSWIN_ /* Restore sockets to synchronous mode*/ - - opt = SO_SYNCHRONOUS_NONALERT; - setsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *) &opt, sizeof(opt)); - + if (WIN32_OS_version !=_WIN_OS_WINNT) { + getsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *) &opt, &optlen); + opt = opt | SO_SYNCHRONOUS_NONALERT; + setsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *) &opt, optlen); + } #endif } Index: squid3/src/win32.cc =================================================================== RCS file: /cvsroot/squid-sf//squid3/src/win32.cc,v retrieving revision 1.4.2.9 retrieving revision 1.4.2.10 diff -u -r1.4.2.9 -r1.4.2.10 --- squid3/src/win32.cc 21 Jun 2004 21:35:05 -0000 1.4.2.9 +++ squid3/src/win32.cc 27 Jun 2004 17:37:22 -0000 1.4.2.10 @@ -1,6 +1,6 @@ /* - * $Id: win32.cc,v 1.4.2.9 2004/06/21 21:35:05 serassio Exp $ + * $Id: win32.cc,v 1.4.2.10 2004/06/27 17:37:22 serassio Exp $ * * * * * * * * * Legal stuff * * * * * * * * @@ -1010,6 +1010,7 @@ int iVersionRequested; WSADATA wsaData; int err, opt; + int optlen = sizeof(opt); if (s_iInitCount > 0) { s_iInitCount++; @@ -1034,11 +1035,19 @@ return (s_iInitCount); } - opt = SO_SYNCHRONOUS_NONALERT; - if (setsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *) &opt, sizeof(opt))) { - s_iInitCount = -3; - WSACleanup(); - return (s_iInitCount); + if (WIN32_OS_version !=_WIN_OS_WINNT) { + if (getsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *)&opt, &optlen)) { + s_iInitCount = -3; + WSACleanup(); + return (s_iInitCount); + } else { + opt = opt | SO_SYNCHRONOUS_NONALERT; + if (setsockopt(INVALID_SOCKET, SOL_SOCKET, SO_OPENTYPE, (char *) &opt, optlen)) { + s_iInitCount = -3; + WSACleanup(); + return (s_iInitCount); + } + } } WIN32_Socks_initialized = 1;