Parcourir la source

Merge pull request #54 from soutaro/shutdown-on-stop

shutdown client sockets instead of release on stop
Damian Kołakowski il y a 10 ans
Parent
commit
08be64cd79
2 fichiers modifiés avec 10 ajouts et 2 suppressions
  1. 1 1
      Common/HttpServer.swift
  2. 9 1
      Common/Socket.swift

+ 1 - 1
Common/HttpServer.swift

@@ -82,7 +82,7 @@ public class HttpServer
         self.listenSocket.release()
         HttpServer.lock(self.clientSocketsLock) {
             for socket in self.clientSockets {
-                socket.release()
+                socket.shutdown()
             }
             self.clientSockets.removeAll(keepCapacity: true)
         }

+ 9 - 1
Common/Socket.swift

@@ -72,6 +72,10 @@ public class Socket : Hashable {
         Socket.release(self.socketFileDescriptor)
     }
     
+    public func shutdown() {
+        Socket.shutdown(self.socketFileDescriptor)
+    }
+    
     public func acceptClientSocket() throws -> Socket {
         var addr = sockaddr(sa_len: 0, sa_family: 0, sa_data: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
         var len: socklen_t = 0
@@ -158,8 +162,12 @@ public class Socket : Hashable {
         setsockopt(socket, SOL_SOCKET, SO_NOSIGPIPE, &no_sig_pipe, socklen_t(sizeof(Int32)));
     }
     
+    private class func shutdown(socket: CInt) {
+        Darwin.shutdown(socket, SHUT_RDWR)
+    }
+    
     private class func release(socket: CInt) {
-        shutdown(socket, SHUT_RDWR)
+        Darwin.shutdown(socket, SHUT_RDWR)
         close(socket)
     }