Bladeren bron

Get rid of shutdown system call.

Damian Kołakowski 9 jaren geleden
bovenliggende
commit
31ed6b73dc

+ 3 - 3
Sources/HttpServerIO.swift

@@ -84,12 +84,12 @@ public class HttpServerIO {
         self.state = .stopping
         // Shutdown connected peers because they can live in 'keep-alive' or 'websocket' loops.
         for socket in self.sockets {
-            socket.shutdwn()
+            socket.close()
         }
         self.queue.sync {
             self.sockets.removeAll(keepingCapacity: true)
         }
-        socket.release()
+        socket.close()
         self.state = .stopped
     }
     
@@ -120,7 +120,7 @@ public class HttpServerIO {
             }
             if !keepConnection { break }
         }
-        socket.release()
+        socket.close()
     }
     
     private struct InnerWriteContext: HttpResponseBodyWriter {

+ 3 - 3
Sources/Socket+Server.swift

@@ -24,7 +24,7 @@ extension Socket {
         var value: Int32 = 1
         if setsockopt(socketFileDescriptor, SOL_SOCKET, SO_REUSEADDR, &value, socklen_t(MemoryLayout<Int32>.size)) == -1 {
             let details = Errno.description()
-            Socket.release(socketFileDescriptor)
+            Socket.close(socketFileDescriptor)
             throw SocketError.socketSettingReUseAddrFailed(details)
         }
         Socket.setNoSigPipe(socketFileDescriptor)
@@ -73,13 +73,13 @@ extension Socket {
         
         if bindResult == -1 {
             let details = Errno.description()
-            Socket.release(socketFileDescriptor)
+            Socket.close(socketFileDescriptor)
             throw SocketError.bindFailed(details)
         }
         
         if listen(socketFileDescriptor, maxPendingConnection) == -1 {
             let details = Errno.description()
-            Socket.release(socketFileDescriptor)
+            Socket.close(socketFileDescriptor)
             throw SocketError.listenFailed(details)
         }
         return Socket(socketFileDescriptor: socketFileDescriptor)

+ 5 - 26
Sources/Socket.swift

@@ -33,25 +33,17 @@ open class Socket: Hashable, Equatable {
     }
     
     deinit {
-        shutdwn()
+        close()
     }
     
     public var hashValue: Int { return Int(self.socketFileDescriptor) }
     
-    public func release() {
+    public func close() {
         if shutdown {
             return
         }
         shutdown = true
-        Socket.release(self.socketFileDescriptor)
-    }
-    
-    public func shutdwn() {
-        if shutdown {
-            return
-        }
-        shutdown = true
-        Socket.shutdwn(self.socketFileDescriptor)
+        Socket.close(self.socketFileDescriptor)
     }
     
     public func port() throws -> in_port_t {
@@ -164,24 +156,11 @@ open class Socket: Hashable, Equatable {
         #endif
     }
     
-    public class func shutdwn(_ socket: Int32) {
+    public class func close(_ socket: Int32) {
         #if os(Linux)
-            let _ = Glibc.shutdown(socket, Int32(SHUT_RDWR))
-        #else
-            let _ = Darwin.shutdown(socket, SHUT_RDWR)
-        #endif
-    }
-    
-    public class func release(_ socket: Int32) {
-        #if os(Linux)
-            let _ = Glibc.shutdown(socket, Int32(SHUT_RDWR))
             let _ = Glibc.close(socket)
         #else
-            if Darwin.shutdown(socket, SHUT_RDWR) != -1 {
-                // If you close socket which was already closed it produces exception visible in TestFlight's crash log.
-                // This is easily can be fixed by checking result on shutdown function != -1.
-                close(socket)
-            }
+            let _ = Darwin.close(socket)
         #endif
     }
 }

+ 2 - 2
Sources/WebSockets.swift

@@ -65,7 +65,7 @@ public func websocket(
                 case .continue:
                     // There is no message to continue, failed immediatelly.
                     if fragmentedOpCode == .close {
-                        socket.shutdwn()
+                        socket.close()
                     }
                     frame.opcode = fragmentedOpCode
                     if frame.fin {
@@ -148,7 +148,7 @@ public class WebSocketSession: Hashable, Equatable  {
     
     deinit {
         writeCloseFrame()
-        socket.shutdwn()
+        socket.close()
     }
     
     public func writeText(_ text: String) -> Void {

+ 2 - 3
XCode/Swifter.xcodeproj/project.pbxproj

@@ -310,6 +310,7 @@
 				7C76B6E91D2C44F30030FC98 /* Sources */,
 				7CA4815619A2EF2B0030B30D /* Resources */,
 				7CCD876C1C660B250068099B /* SwifterTestsCommon */,
+				7CCD875D1C66099B0068099B /* SwifteriOSTests */,
 				7CCD877A1C660EA30068099B /* SwifterOSXTests */,
 				7C839B6F19422CFF003A6950 /* Products */,
 				7AE893FC1C0512C400A29F63 /* SwifterMac */,
@@ -355,8 +356,7 @@
 			children = (
 				7CCD87601C66099B0068099B /* Info.plist */,
 			);
-			name = SwifteriOSTests;
-			path = ../SwifteriOSTests;
+			path = SwifteriOSTests;
 			sourceTree = "<group>";
 		};
 		7CCD876C1C660B250068099B /* SwifterTestsCommon */ = {
@@ -368,7 +368,6 @@
 				7CCD876E1C660B250068099B /* SwifterTestsStringExtensions.swift */,
 				7C4785E81C71D15600A9FE73 /* SwifterTestsWebSocketSession.swift */,
 				0858E7F31D68BB2600491CD1 /* IOSafetyTests.swift */,
-				7CCD875D1C66099B0068099B /* SwifteriOSTests */,
 			);
 			path = SwifterTestsCommon;
 			sourceTree = "<group>";