|
|
@@ -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)
|