Просмотр исходного кода

Added flag to force IPv4 (linux)

kolakowski 10 лет назад
Родитель
Сommit
a62a53ac26
3 измененных файлов с 15 добавлено и 12 удалено
  1. 2 2
      Sources/HttpServerIO.swift
  2. BIN
      Sources/Socket
  3. 13 10
      Sources/Socket.swift

+ 2 - 2
Sources/HttpServerIO.swift

@@ -5,11 +5,11 @@
 //  Copyright (c) 2014-2016 Damian Kołakowski. All rights reserved.
 //
 
-import Foundation
-
 #if os(Linux)
     import Glibc
     import NSLinux
+#else
+    import Foundation
 #endif
 
 public class HttpServerIO {

BIN
Sources/Socket


+ 13 - 10
Sources/Socket.swift

@@ -31,7 +31,7 @@ public class Socket: Hashable, Equatable {
     public class func tcpSocketForListen(port: in_port_t, forceIPv4: Bool = false, maxPendingConnection: Int32 = SOMAXCONN) throws -> Socket {
         
         #if os(Linux)
-            let socketFileDescriptor = socket(AF_INET, Int32(SOCK_STREAM.rawValue), 0)
+            let socketFileDescriptor = socket(forceIPv4 ? AF_INET : AF_INET6, Int32(SOCK_STREAM.rawValue), 0)
         #else
             let socketFileDescriptor = socket(forceIPv4 ? AF_INET : AF_INET6, SOCK_STREAM, 0)
         #endif
@@ -51,21 +51,25 @@ public class Socket: Hashable, Equatable {
         #if os(Linux)
             var bindResult: Int32 = -1
             if forceIPv4 {
-                var addr = sockaddr_in()
-                addr.sin_family = sa_family_t(AF_INET)
-                addr.sin_port = Socket.htonsPort(port)
-                addr.sin_addr = in_addr(s_addr: in_addr_t(0))
-                addr.sin_zero = (0, 0, 0, 0, 0, 0, 0, 0)
+                var addr = sockaddr_in(sin_family: sa_family_t(AF_INET),
+                    sin_port: Socket.htonsPort(port),
+                    sin_addr: in_addr(s_addr: in_addr_t(0)),
+                    sin_zero:(0, 0, 0, 0, 0, 0, 0, 0))
                 
                 bindResult = withUnsafePointer(&addr) { bind(socketFileDescriptor, UnsafePointer<sockaddr>($0), socklen_t(sizeof(sockaddr_in))) }
             } else {
+                var addr = sockaddr_in6(sin6_family: sa_family_t(AF_INET6),
+                    sin6_port: Socket.htonsPort(port),
+                    sin6_flowinfo: 0,
+                    sin6_addr: in6addr_any,
+                    sin6_scope_id: 0)
                 
+                bindResult = withUnsafePointer(&addr) { bind(socketFileDescriptor, UnsafePointer<sockaddr>($0), socklen_t(sizeof(sockaddr_in6))) }
             }
         #else
             var bindResult: Int32 = -1
             if forceIPv4 {
-                var addr = sockaddr_in(
-                    sin_len: UInt8(strideof(sockaddr_in)),
+                var addr = sockaddr_in(sin_len: UInt8(strideof(sockaddr_in)),
                     sin_family: UInt8(AF_INET),
                     sin_port: Socket.htonsPort(port),
                     sin_addr: in_addr(s_addr: in_addr_t(0)),
@@ -73,8 +77,7 @@ public class Socket: Hashable, Equatable {
              
                 bindResult = withUnsafePointer(&addr) { bind(socketFileDescriptor, UnsafePointer<sockaddr>($0), socklen_t(sizeof(sockaddr_in))) }
             } else {
-                var addr = sockaddr_in6(sin6_len:
-                    UInt8(strideof(sockaddr_in6)),
+                var addr = sockaddr_in6(sin6_len: UInt8(strideof(sockaddr_in6)),
                     sin6_family: UInt8(AF_INET6),
                     sin6_port: Socket.htonsPort(port),
                     sin6_flowinfo: 0,