Do not clear FD_WINE_CONNECTED on shutdown(). FD_WINE_CONNECTED
(currently unused) can thus be used to determine if a stream socket
was ever connected.
diff --git a/server/sock.c b/server/sock.c
index 0a45c2f..05324b9 100644
--- a/server/sock.c
+++ b/server/sock.c
@@ -398,7 +398,7 @@
{
sock->errors[FD_CLOSE_BIT] = sock_error( sock->obj.fd );
if ( (event & POLLERR) || ( sock_shutdown_type == SOCK_SHUTDOWN_EOF && (event & POLLHUP) ))
- sock->state &= ~(FD_WINE_CONNECTED|FD_WRITE);
+ sock->state &= ~FD_WRITE;
sock->pmask |= FD_CLOSE;
sock->hmask |= FD_CLOSE;
if (debug_level)
@@ -494,8 +494,11 @@
}
*flags = 0;
if (sock->flags & WSA_FLAG_OVERLAPPED) *flags |= FD_FLAG_OVERLAPPED;
- if ( !(sock->state & FD_READ ) ) *flags |= FD_FLAG_RECV_SHUTDOWN;
- if ( !(sock->state & FD_WRITE ) ) *flags |= FD_FLAG_SEND_SHUTDOWN;
+ if ( sock->type != SOCK_STREAM || sock->state & FD_WINE_CONNECTED )
+ {
+ if ( !(sock->state & FD_READ ) ) *flags |= FD_FLAG_RECV_SHUTDOWN;
+ if ( !(sock->state & FD_WRITE ) ) *flags |= FD_FLAG_SEND_SHUTDOWN;
+ }
return FD_TYPE_SOCKET;
}