Преглед изворни кода

Server is launched with correct port value ( added custom htons ) method.

Damian Kołakowski пре 12 година
родитељ
комит
30acc441a4

BIN
Swifter.xcodeproj/project.xcworkspace/xcuserdata/damiankolakowski.xcuserdatad/UserInterfaceState.xcuserstate


+ 3 - 3
Swifter.xcodeproj/xcuserdata/damiankolakowski.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist

@@ -10,11 +10,11 @@
             ignoreCount = "0"
             continueAfterRunningActions = "No"
             filePath = "Swifter/Socket.swift"
-            timestampString = "426535422.067964"
+            timestampString = "428780536.031456"
             startingColumnNumber = "9223372036854775807"
             endingColumnNumber = "9223372036854775807"
-            startingLineNumber = "81"
-            endingLineNumber = "81"
+            startingLineNumber = "83"
+            endingLineNumber = "83"
             landmarkName = "nosigpipe(_:)"
             landmarkType = "5">
          </BreakpointContent>

+ 7 - 3
Swifter/Socket.swift

@@ -10,7 +10,7 @@ import Foundation
 /* Low level routines for POSIX sockets */
 
 struct Socket {
-    
+        
     static func socketLastError(reason:String) -> NSError {
         let errorCode = errno
         if let errorText = String.fromCString(ConstUnsafePointer(strerror(errorCode))) {
@@ -32,9 +32,8 @@ struct Socket {
             return nil
         }
         nosigpipe(s)
-        // Can't find htonl(...) function in Swift runtime so port value will be diffrent.
         var addr = sockaddr_in(sin_len: __uint8_t(sizeof(sockaddr_in)), sin_family: sa_family_t(AF_INET),
-            sin_port: port, sin_addr: in_addr(s_addr: inet_addr("0.0.0.0")), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
+            sin_port: port_htons(port), sin_addr: in_addr(s_addr: inet_addr("0.0.0.0")), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0))
         
         var sock_addr = sockaddr(sa_len: 0, sa_family: 0, sa_data: (0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0))
         memcpy(&sock_addr, &addr, UInt(sizeof(sockaddr_in)))
@@ -83,6 +82,11 @@ struct Socket {
         setsockopt(socket, SOL_SOCKET, SO_NOSIGPIPE, &no_sig_pipe, socklen_t(sizeof(Int32)));
     }
     
+    static func port_htons(port: in_port_t) -> in_port_t {
+        let isLittleEndian = Int(OSHostByteOrder()) == OSLittleEndian
+        return isLittleEndian ? _OSSwapInt16(port) : port
+    }
+    
     static func release(socket: CInt) {
         shutdown(socket, SHUT_RDWR)
         close(socket)