This Patch fixes a problem with the SQL Server 2000 MMC administrative console, or perhaps with the native ODBC32.dll itself. Windows apparently accepts a truncated struct timeval, linux does not. The patch allows successful connection to a server in the SQL Enterprise Manager via TCP. My first patch so please let me know of anything I can do to improve this patch, or the format I used to submit it. CHANGELOG * dlls/winsock/socket.c: Greg Turner <gmturner007@ameritech.net> - accept time_t argument in WS_setsockopt/WS_SO_RCVTIMEO; translate to struct timeval for edification of setsockopt. Index: dlls/winsock/socket.c =================================================================== RCS file: /home/wine/wine/dlls/winsock/socket.c,v retrieving revision 1.106 diff -u -r1.106 socket.c --- dlls/winsock/socket.c 12 Sep 2002 17:56:30 -0000 1.106 +++ dlls/winsock/socket.c 24 Sep 2002 01:08:14 -0000 @@ -2670,6 +2670,7 @@ { struct linger linger; int woptval; + struct timeval tval; /* Is a privileged and useless operation, so we don't. */ if ((optname == WS_SO_DEBUG) && (level == WS_SOL_SOCKET)) { @@ -2704,6 +2705,21 @@ optval= (char*) &woptval; optlen=sizeof(int); } + if (level == SOL_SOCKET && optname == SO_RCVTIMEO && optlen < sizeof(struct timeval)) { + if (optlen == sizeof(time_t)) { + /* Apparently WinSock will accept a shortened struct timeval. + FIXME: should we do the same for SO_SNDTIMEO? */ + WARN("Short struct timeval in SO_RCVTIMEO: assuming time_t\n"); + tval.tv_sec = *(time_t*)optval; + tval.tv_usec = 0; + optlen = sizeof(struct timeval); + optval = (char*)&tval; + } else { + WARN("SO_RCVTIMEO for %d bytes is too small: ignored\n", optlen); + close(fd); + return 0; + } + } } if(optname == SO_RCVBUF && *(int*)optval < 2048) { WARN("SO_RCVBF for %d bytes is too small: ignored\n", *(int*)optval ); -- Greg Turner <gmturner007@ameritech.net> "Waiting periods are only a step. Registration is only a step. The prohibition of private firearms is the goal." -U.S. Attorney General Janet Reno, December 1993