Bruno Jesus : ws2_32: Make closesocket() more robust.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Mar 5 09:53:25 CST 2015
Module: wine
Branch: master
Commit: bf36fb02165db67a35ccd3f3c55f5b605a780221
URL: http://source.winehq.org/git/wine.git/?a=commit;h=bf36fb02165db67a35ccd3f3c55f5b605a780221
Author: Bruno Jesus <00cpxxx at gmail.com>
Date: Thu Mar 5 03:35:06 2015 -0300
ws2_32: Make closesocket() more robust.
---
dlls/ws2_32/socket.c | 20 +++++++++++++++++---
1 file changed, 17 insertions(+), 3 deletions(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 5bfdecf..7e875e7 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -2780,9 +2780,23 @@ int WINAPI WS_bind(SOCKET s, const struct WS_sockaddr* name, int namelen)
*/
int WINAPI WS_closesocket(SOCKET s)
{
- TRACE("socket %04lx\n", s);
- if (CloseHandle(SOCKET2HANDLE(s))) return 0;
- return SOCKET_ERROR;
+ int res = SOCKET_ERROR, fd;
+ if (num_startup)
+ {
+ fd = get_sock_fd(s, FILE_READ_DATA, NULL);
+ if (fd >= 0)
+ {
+ release_sock_fd(s, fd);
+ if (CloseHandle(SOCKET2HANDLE(s)))
+ res = 0;
+ }
+ else
+ SetLastError(WSAENOTSOCK);
+ }
+ else
+ SetLastError(WSANOTINITIALISED);
+ TRACE("(socket %04lx) -> %d\n", s, res);
+ return res;
}
static int do_connect(int fd, const struct WS_sockaddr* name, int namelen)
More information about the wine-cvs
mailing list