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