* significantly more enjoyable.)
*/
#ifndef lint
-static const char rcsid[] = "$Id: os_win32.c,v 1.33 2002/03/05 18:15:15 robs Exp $";
+static const char rcsid[] = "$Id: os_win32.c,v 1.34 2003/06/22 00:16:43 robs Exp $";
#endif /* not lint */
#define WIN32_LEAN_AND_MEAN
*
*--------------------------------------------------------------
*/
-int OS_Close(int fd)
+int OS_Close(int fd, int shutdown_ok)
{
int ret = 0;
* cause the client to discard potentially useful response data.
*/
- if (shutdown(fdTable[fd].fid.sock, SD_SEND) == 0)
+ if (shutdown_ok)
{
- struct timeval tv;
- fd_set rfds;
- int sock = fdTable[fd].fid.sock;
- int rv;
- char trash[1024];
+ if (shutdown(fdTable[fd].fid.sock, SD_SEND) == 0)
+ {
+ struct timeval tv;
+ fd_set rfds;
+ int sock = fdTable[fd].fid.sock;
+ int rv;
+ char trash[1024];
- FD_ZERO(&rfds);
+ FD_ZERO(&rfds);
- do
- {
- FD_SET(sock, &rfds);
+ do
+ {
+#pragma warning( disable : 4127 )
+ FD_SET((unsigned) sock, &rfds);
+#pragma warning( default : 4127 )
+
tv.tv_sec = 2;
tv.tv_usec = 0;
rv = select(sock + 1, &rfds, NULL, NULL, &tv);
+ }
+ while (rv > 0 && recv(sock, trash, sizeof(trash), 0) > 0);
}
- while (rv > 0 && recv(sock, trash, sizeof(trash), 0) > 0);
}
closesocket(fdTable[fd].fid.sock);
*
*----------------------------------------------------------------------
*/
-int OS_IpcClose(int ipcFd)
+int OS_IpcClose(int ipcFd, int shutdown)
{
if (ipcFd == -1) return 0;
case FD_SOCKET_SYNC:
- OS_Close(ipcFd);
+ OS_Close(ipcFd, shutdown);
break;
case FD_UNUSED: