0001    #if os(Linux)
0002        import Glibc
0003    #else
0004        import Foundation
0005    #endif
0006    
0007    import Vaquita
0008    
0009    enum SocketType {
0010        case TCP
0011        case UDP
0012    }
0013    
0014    enum SocketError
Socket.swift:75
            throw SocketError.AcceptFailed(Socket.descriptionOfLastError())
Socket.swift:114
            throw SocketError.RecvFailed(Socket.descriptionOfLastError())
Socket.swift:138
            throw SocketError.GetPeerNameFailed(Socket.descriptionOfLastError())
Socket.swift:144
            throw SocketError.GetNameInfoFailed(Socket.descriptionOfLastError())
Socket.swift:148
            throw SocketError.ConvertingPeerNameFailed
SocketManager.swift:24
            throw SocketError.SocketCreationFailed(Socket.descriptionOfLastError())
SocketManager.swift:33
                throw SocketError.SocketSettingReUseAddrFailed(details)
SocketManager.swift:57
            throw SocketError.BindFailed(details)
SocketManager.swift:63
            throw SocketError.ListenFailed(details)
SocketServer.swift:138
        } catch let socketError as SocketError {
: ErrorType { 0015 case SocketCreationFailed
Socket.swift:28
        case let .SocketCreationFailed(message):
SocketManager.swift:24
            throw SocketError.SocketCreationFailed(Socket.descriptionOfLastError())
(String) 0016 case SocketSettingReUseAddrFailed
Socket.swift:30
        case let .SocketSettingReUseAddrFailed(message):
SocketManager.swift:33
                throw SocketError.SocketSettingReUseAddrFailed(details)
(String) 0017 case BindFailed
Socket.swift:32
        case let .BindFailed(message):
SocketManager.swift:57
            throw SocketError.BindFailed(details)
(String) 0018 case ListenFailed
Socket.swift:34
        case let .ListenFailed(message):
SocketManager.swift:63
            throw SocketError.ListenFailed(details)
(String) 0019 case WriteFailed
Socket.swift:36
        case let .WriteFailed(message):
(String) 0020 case GetPeerNameFailed
Socket.swift:38
        case let .GetPeerNameFailed(message):
Socket.swift:138
            throw SocketError.GetPeerNameFailed(Socket.descriptionOfLastError())
(String) 0021 case ConvertingPeerNameFailed
Socket.swift:148
            throw SocketError.ConvertingPeerNameFailed
0022 case GetNameInfoFailed
Socket.swift:40
        case let .GetNameInfoFailed(message):
Socket.swift:144
            throw SocketError.GetNameInfoFailed(Socket.descriptionOfLastError())
(String) 0023 case AcceptFailed
Socket.swift:42
        case let .AcceptFailed(message):
Socket.swift:75
            throw SocketError.AcceptFailed(Socket.descriptionOfLastError())
(String) 0024 case RecvFailed
Socket.swift:44
        case let .RecvFailed(message):
Socket.swift:114
            throw SocketError.RecvFailed(Socket.descriptionOfLastError())
(String) 0025 0026 var errorMessage
SocketServer.swift:139
            if let message = socketError.errorMessage {
: String? { 0027 switch self { 0028 case let .SocketCreationFailed(message): 0029 return message 0030 case let .SocketSettingReUseAddrFailed(message): 0031 return message 0032 case let .BindFailed(message): 0033 return message 0034 case let .ListenFailed(message): 0035 return message 0036 case let .WriteFailed(message): 0037 return message 0038 case let .GetPeerNameFailed(message): 0039 return message 0040 case let .GetNameInfoFailed(message): 0041 return message 0042 case let .AcceptFailed(message): 0043 return message 0044 case let .RecvFailed(message): 0045 return message 0046 default: 0047 return nil 0048 } 0049 } 0050 } 0051 0052 struct Socket
Response.swift:33
    let socket: Socket
Response.swift:134
    init(request: Request, responder: Responder, socket: Socket) {
Socket.swift:70
    func acceptClientSocket() throws -> Socket {
Socket.swift:75
            throw SocketError.AcceptFailed(Socket.descriptionOfLastError())
Socket.swift:77
        Socket.setNoSigPipe(clientSocket)
Socket.swift:78
        return Socket(rawSocket: clientSocket)
Socket.swift:114
            throw SocketError.RecvFailed(Socket.descriptionOfLastError())
Socket.swift:128
            if n > Socket.CR { characters.append(Character(UnicodeScalar(n))) }
Socket.swift:129
        } while n != Socket.NL
Socket.swift:138
            throw SocketError.GetPeerNameFailed(Socket.descriptionOfLastError())
Socket.swift:144
            throw SocketError.GetNameInfoFailed(Socket.descriptionOfLastError())
Socket.swift:179
extension Socket: Hashable {
Socket.swift:187
extension Socket: Equatable {
Socket.swift:190
func ==(socket1: Socket, socket2: Socket) -> Bool {
Socket.swift:190
func ==(socket1: Socket, socket2: Socket) -> Bool {
SocketManager.swift:11
        pendingConnectionCount: Int32 = SOMAXCONN) throws -> Socket {
SocketManager.swift:24
            throw SocketError.SocketCreationFailed(Socket.descriptionOfLastError())
SocketManager.swift:31
                let details = Socket.descriptionOfLastError()
SocketManager.swift:36
        Socket.setNoSigPipe(rawSocket)
SocketManager.swift:40
        socketAddress.sin_port = Socket.htonsPort(port)
SocketManager.swift:55
            let details = Socket.descriptionOfLastError()
SocketManager.swift:61
            let details = Socket.descriptionOfLastError()
SocketManager.swift:66
        return Socket(rawSocket: rawSocket)
SocketManager.swift:70
    class func closeSocket(socket: Socket) {
SocketManager.swift:74
    class func shutdownSocket(socket: Socket) {
SocketParser.swift:18
    func readHttpRequest(socket: Socket) throws -> Request {
SocketParser.swift:95
    private func readHeaders(socket: Socket) throws -> [String: String] {
SocketServer.swift:19
    private var listenSocket: Socket = Socket(rawSocket: -1)
SocketServer.swift:19
    private var listenSocket: Socket = Socket(rawSocket: -1)
SocketServer.swift:21
    private var clientSockets: Set<Socket> = []
SocketServer.swift:67
    func handleConnection(socket: Socket) {
{ 0053 0054 let rawSocket
Socket.swift:59
        self.rawSocket = rawSocket
Socket.swift:63
        SocketManager.closeRawSocket(rawSocket)
Socket.swift:67
        SocketManager.shutdownRawSocket(rawSocket)
Socket.swift:73
        let clientSocket = accept(rawSocket, &addr, &len)
Socket.swift:112
        let next = recv(self.rawSocket as Int32, &buffer, Int(buffer.count), 0)
Socket.swift:137
        if getpeername(self.rawSocket, &addr, &len) != 0 {
Socket.swift:183
        return Int(self.rawSocket)
Socket.swift:191
    return socket1.rawSocket == socket2.rawSocket
Socket.swift:191
    return socket1.rawSocket == socket2.rawSocket
SocketManager.swift:71
        closeRawSocket(socket.rawSocket)
SocketManager.swift:75
        shutdownRawSocket(socket.rawSocket)
: Int32 0055 0056 var peerName: String? 0057 0058 init
Socket.swift:78
        return Socket(rawSocket: clientSocket)
SocketManager.swift:66
        return Socket(rawSocket: rawSocket)
SocketServer.swift:19
    private var listenSocket: Socket = Socket(rawSocket: -1)
(rawSocket: Int32) { 0059 self.rawSocket = rawSocket 0060 } 0061 0062 func release
SocketServer.swift:91
        self.listenSocket.release()
SocketServer.swift:95
                socket.release()
SocketServer.swift:114
            socket.release()
() { 0063 SocketManager.closeRawSocket(rawSocket) 0064 } 0065 0066 func shutdown() { 0067 SocketManager.shutdownRawSocket(rawSocket) 0068 } 0069 0070 func acceptClientSocket
SocketServer.swift:45
            while let socket = try? self.listenSocket.acceptClientSocket() {
() throws -> Socket { 0071 var addr = sockaddr() 0072 var len: socklen_t = 0 0073 let clientSocket = accept(rawSocket, &addr, &len) 0074 if clientSocket == -1 { 0075 throw SocketError.AcceptFailed(Socket.descriptionOfLastError()) 0076 } 0077 Socket.setNoSigPipe(clientSocket) 0078 return Socket(rawSocket: clientSocket) 0079 } 0080 0081 func writeString
SocketServer.swift:118
            try socket.writeString("HTTP/1.1 \(response.status.code) \(response.reasonPhrase)\r\n")
SocketServer.swift:131
                try socket.writeString("\(name): \(value)\r\n")
SocketServer.swift:134
            try socket.writeString("\r\n")
(string: String) throws { 0082 let data = Data(string: string) 0083 try writeData(data) 0084 } 0085 0086 func writeData(data: Data) throws { 0087 try data.bytes.withUnsafeBufferPointer { 0088 0089 var sent = 0 0090 0091 while sent < data.bytes.count { 0092 0093 #if os(Linux) 0094 let s = send(self.rawSocket, 0095 $0.baseAddress + sent, Int(data.size - sent), 0096 Int32(MSG_NOSIGNAL)) 0097 #else 0098 let s = write(self.rawSocket, 0099 $0.baseAddress + sent, Int(data.size - sent)) 0100 #endif 0101 0102 if s <= 0 { 0103 throw SocketError.WriteFailed(Socket.descriptionOfLastError()) 0104 } 0105 sent += s 0106 } 0107 } 0108 } 0109 0110 func read
Socket.swift:127
            n = try self.read()
() throws -> UInt8 { 0111 var buffer = [UInt8](count: 1, repeatedValue: 0) 0112 let next = recv(self.rawSocket as Int32, &buffer, Int(buffer.count), 0) 0113 if next <= 0 { 0114 throw SocketError.RecvFailed(Socket.descriptionOfLastError()) 0115 } 0116 return buffer[0] 0117 } 0118 0119 private static let CR
Socket.swift:128
            if n > Socket.CR { characters.append(Character(UnicodeScalar(n))) }
= UInt8(13) 0120 0121 private static let NL
Socket.swift:129
        } while n != Socket.NL
= UInt8(10) 0122 0123 func readLine
SocketParser.swift:20
        let statusLine = try socket.readLine()
SocketParser.swift:98
            let headerLine = try socket.readLine()
() throws -> String { 0124 var characters: String = "" 0125 var n: UInt8 = 0 0126 repeat { 0127 n = try self.read() 0128 if n > Socket.CR { characters.append(Character(UnicodeScalar(n))) } 0129 } while n != Socket.NL 0130 return characters 0131 } 0132 0133 func peername
SocketServer.swift:69
        let address = try? socket.peername()
() throws -> String { 0134 0135 var addr = sockaddr(), len: socklen_t = socklen_t(sizeof(sockaddr)) 0136 0137 if getpeername(self.rawSocket, &addr, &len) != 0 { 0138 throw SocketError.GetPeerNameFailed(Socket.descriptionOfLastError()) 0139 } 0140 0141 var hostBuffer = [CChar](count: Int(NI_MAXHOST), repeatedValue: 0) 0142 0143 if getnameinfo(&addr, len, &hostBuffer, socklen_t(hostBuffer.count), nil, 0, NI_NUMERICHOST) != 0 { 0144 throw SocketError.GetNameInfoFailed(Socket.descriptionOfLastError()) 0145 } 0146 0147 guard let name = String.fromCString(hostBuffer) else { 0148 throw SocketError.ConvertingPeerNameFailed 0149 } 0150 0151 return name 0152 } 0153 0154 static func descriptionOfLastError
Socket.swift:75
            throw SocketError.AcceptFailed(Socket.descriptionOfLastError())
Socket.swift:114
            throw SocketError.RecvFailed(Socket.descriptionOfLastError())
Socket.swift:138
            throw SocketError.GetPeerNameFailed(Socket.descriptionOfLastError())
Socket.swift:144
            throw SocketError.GetNameInfoFailed(Socket.descriptionOfLastError())
SocketManager.swift:24
            throw SocketError.SocketCreationFailed(Socket.descriptionOfLastError())
SocketManager.swift:31
                let details = Socket.descriptionOfLastError()
SocketManager.swift:55
            let details = Socket.descriptionOfLastError()
SocketManager.swift:61
            let details = Socket.descriptionOfLastError()
() -> String { 0155 return String.fromCString(UnsafePointer(strerror(errno))) ?? "Error: \(errno)" 0156 } 0157 0158 static func setNoSigPipe
Socket.swift:77
        Socket.setNoSigPipe(clientSocket)
SocketManager.swift:36
        Socket.setNoSigPipe(rawSocket)
(socket: Int32) { 0159 #if os(Linux) 0160 // There is no SO_NOSIGPIPE in Linux (nor some other systems). You can instead use the MSG_NOSIGNAL flag when calling send(), 0161 // or use signal(SIGPIPE, SIG_IGN) to make your entire application ignore SIGPIPE. 0162 #else 0163 // Prevents crashes when blocking calls are pending and the app is paused ( via Home button ). 0164 var no_sig_pipe: Int32 = 1 0165 setsockopt(socket, SOL_SOCKET, SO_NOSIGPIPE, &no_sig_pipe, socklen_t(sizeof(Int32))) 0166 #endif 0167 } 0168 0169 static func htonsPort
SocketManager.swift:40
        socketAddress.sin_port = Socket.htonsPort(port)
(port: in_port_t) -> in_port_t { 0170 #if os(Linux) 0171 return port.bigEndian //use htons(). LLVM Crash currently 0172 #else 0173 let isLittleEndian = Int(OSHostByteOrder()) == OSLittleEndian 0174 return isLittleEndian ? _OSSwapInt16(port) : port 0175 #endif 0176 } 0177 } 0178 0179 extension Socket: Hashable { 0180 0181 var hashValue: Int { 0182 0183 return Int(self.rawSocket) 0184 } 0185 } 0186 0187 extension Socket: Equatable { 0188 } 0189 0190 func ==(socket1: Socket, socket2: Socket) -> Bool { 0191 return socket1.rawSocket == socket2.rawSocket 0192 } 0193