0001    #if os(Linux)
0002    import Glibc
0003    
0004    private let sock_stream = Int32(SOCK_STREAM.rawValue)
0005    
0006    private let system_accept = Glibc.accept
0007    private let system_bind = Glibc.bind
0008    private let system_close = Glibc.close
0009    private let system_listen = Glibc.listen
0010    private let system_read = Glibc.read
0011    private let system_send = Glibc.send
0012    private let system_write = Glibc.write
0013    private let system_shutdown = Glibc.shutdown
0014    private let system_select = Glibc.select
0015    private let system_pipe = Glibc.pipe
0016    #else
0017    import Darwin.C
0018    
0019    private let sock_stream
Socket.swift:68
    descriptor = socket(family, sock_stream, family == AF_UNIX ? 0 : IPPROTO_TCP)
= SOCK_STREAM 0020 0021 private let system_accept
Socket.swift:136
    let descriptor = system_accept(self.descriptor, nil, nil)
= Darwin.accept 0022 private let system_bind
Socket.swift:102
    guard system_bind(descriptor, sockaddr_cast(&addr), len) != -1 else {
Socket.swift:130
    guard system_bind(descriptor, sockaddr_cast(&addr), len) != -1 else {
= Darwin.bind 0023 private let system_close
Socket.swift:144
    system_close(descriptor)
= Darwin.close 0024 private let system_listen
Socket.swift:89
    if system_listen(descriptor, backlog) == -1 {
= Darwin.listen 0025 private let system_read
Socket.swift:170
    let bytes = system_read(descriptor, data.bytes, data.capacity)
= Darwin.read 0026 private let system_send
Socket.swift:158
      system_send(descriptor, bytes, Int(strlen(bytes)), flags)
= Darwin.send 0027 private let system_write
Socket.swift:164
      system_write(descriptor, bytes, Int(strlen(bytes)))
= Darwin.write 0028 private let system_shutdown
Socket.swift:148
    system_shutdown(descriptor, Int32(SHUT_RDWR))
= Darwin.shutdown 0029 private let system_select
Socket.swift:252
  let result = system_select(maxFD + 1, &readFDs, &writeFDs, &errorFDs, &timeout)
= Darwin.select 0030 private let system_pipe
Socket.swift:58
    if system_pipe(&fds) == -1 {
= Darwin.pipe 0031 #endif 0032 0033 0034 struct SocketError
Socket.swift:59
      throw SocketError()
Socket.swift:74
      throw SocketError(function: "setsockopt()")
Socket.swift:79
        throw SocketError(function: "setsockopt()")
Socket.swift:90
      throw SocketError()
Socket.swift:103
      throw SocketError()
Socket.swift:114
      throw SocketError()
Socket.swift:131
      throw SocketError()
Socket.swift:138
      throw SocketError()
Socket.swift:172
        throw SocketError()
: ErrorType, CustomStringConvertible { 0035 let function
Socket.swift:39
    self.function = function
Socket.swift:44
    return "Socket.\(function) failed [\(number)]"
: String 0036 let number
Socket.swift:40
    self.number = errno
Socket.swift:44
    return "Socket.\(function) failed [\(number)]"
: Int32 0037 0038 init
Socket.swift:59
      throw SocketError()
Socket.swift:74
      throw SocketError(function: "setsockopt()")
Socket.swift:79
        throw SocketError(function: "setsockopt()")
Socket.swift:90
      throw SocketError()
Socket.swift:103
      throw SocketError()
Socket.swift:114
      throw SocketError()
Socket.swift:131
      throw SocketError()
Socket.swift:138
      throw SocketError()
Socket.swift:172
        throw SocketError()
(function: String = __FUNCTION__) { 0039 self.function = function 0040 self.number = errno 0041 } 0042 0043 var description: String { 0044 return "Socket.\(function) failed [\(number)]" 0045 } 0046 } 0047 0048 0049 /// Represents a TCP AF_INET/AF_UNIX socket 0050 public final class Socket
Arbiter.swift:16
  func socket(backlog: Int32) throws -> Socket {
Arbiter.swift:19
      let socket = try Socket()
Arbiter.swift:28
      let socket = try Socket(family: AF_UNIX)
Arbiter.swift:51
  var listeners: [Socket] = []
HTTPParser.swift:32
  let socket: Socket
HTTPParser.swift:34
  init(socket: Socket) {
Signals.swift:28
  var pipe: [Socket]
Signals.swift:32
    pipe = try Socket.pipe()
Socket.swift:56
  class func pipe() throws -> [Socket] {
Socket.swift:61
    return [Socket(descriptor: fds[0]), Socket(descriptor: fds[1])]
Socket.swift:61
    return [Socket(descriptor: fds[0]), Socket(descriptor: fds[1])]
Socket.swift:135
  func accept() throws -> Socket {
Socket.swift:140
    return Socket(descriptor: descriptor)
Socket.swift:229
func filter(sockets: [Socket], inout _ set: fd_set) -> [Socket] {
Socket.swift:229
func filter(sockets: [Socket], inout _ set: fd_set) -> [Socket] {
Socket.swift:236
func select(reads: [Socket], _ writes: [Socket], _ errors: [Socket], timeout: timeval) -> ([Socket], [Socket], [Socket]) {
Socket.swift:236
func select(reads: [Socket], _ writes: [Socket], _ errors: [Socket], timeout: timeval) -> ([Socket], [Socket], [Socket]) {
Socket.swift:236
func select(reads: [Socket], _ writes: [Socket], _ errors: [Socket], timeout: timeval) -> ([Socket], [Socket], [Socket]) {
Socket.swift:236
func select(reads: [Socket], _ writes: [Socket], _ errors: [Socket], timeout: timeval) -> ([Socket], [Socket], [Socket]) {
Socket.swift:236
func select(reads: [Socket], _ writes: [Socket], _ errors: [Socket], timeout: timeval) -> ([Socket], [Socket], [Socket]) {
Socket.swift:236
func select(reads: [Socket], _ writes: [Socket], _ errors: [Socket], timeout: timeval) -> ([Socket], [Socket], [Socket]) {
SynchronousWorker.swift:14
  let listeners: [Socket]
SynchronousWorker.swift:26
  public init(configuration: Configuration, logger: Logger, listeners: [Socket], notify: Void -> Void, application: Application) {
SynchronousWorker.swift:73
  func runOne(listener: Socket) {
SynchronousWorker.swift:87
  func runMultiple(listeners: [Socket]) {
SynchronousWorker.swift:114
  func wait() -> [Socket] {
SynchronousWorker.swift:127
  func accept(listener: Socket) {
SynchronousWorker.swift:134
  func handle(client: Socket) {
SynchronousWorker.swift:158
func sendResponse(client: Socket, response: ResponseType) {
Worker.swift:25
  init(configuration: Configuration, logger: Logger, listeners: [Socket], notify: Void -> Void, application: Application)
{ 0051 typealias Descriptor
Socket.swift:54
  let descriptor: Descriptor
Socket.swift:84
  init(descriptor: Descriptor) {
= Int32 0052 typealias Port
Socket.swift:94
  func bind(address: String, port: Port) throws {
= UInt16 0053 0054 let descriptor
Socket.swift:68
    descriptor = socket(family, sock_stream, family == AF_UNIX ? 0 : IPPROTO_TCP)
Socket.swift:70
    assert(descriptor > 0)
Socket.swift:73
    guard setsockopt(descriptor, SOL_SOCKET, SO_REUSEADDR, &value, socklen_t(sizeof(Int32))) != -1 else {
Socket.swift:78
    guard setsockopt(descriptor, SOL_SOCKET, SO_NOSIGPIPE, &value, socklen_t(sizeof(Int32))) != -1 else {
Socket.swift:85
    self.descriptor = descriptor
Socket.swift:89
    if system_listen(descriptor, backlog) == -1 {
Socket.swift:102
    guard system_bind(descriptor, sockaddr_cast(&addr), len) != -1 else {
Socket.swift:130
    guard system_bind(descriptor, sockaddr_cast(&addr), len) != -1 else {
Socket.swift:136
    let descriptor = system_accept(self.descriptor, nil, nil)
Socket.swift:144
    system_close(descriptor)
Socket.swift:148
    system_shutdown(descriptor, Int32(SHUT_RDWR))
Socket.swift:158
      system_send(descriptor, bytes, Int(strlen(bytes)), flags)
Socket.swift:164
      system_write(descriptor, bytes, Int(strlen(bytes)))
Socket.swift:170
    let bytes = system_read(descriptor, data.bytes, data.capacity)
Socket.swift:180
      let flags = fcntl(descriptor, F_GETFL, 0)
Socket.swift:185
      let flags = fcntl(descriptor, F_GETFL, 0)
Socket.swift:194
      let _ = fcntl(descriptor, F_SETFL, newFlags)
Socket.swift:201
      let flags = fcntl(descriptor, F_GETFL, 0)
Socket.swift:206
      let flags = fcntl(descriptor, F_GETFL, 0)
Socket.swift:215
      let _ = fcntl(descriptor, F_SETFL, newFlags)
Socket.swift:231
    fdIsSet($0.descriptor, &set)
Socket.swift:241
  reads.forEach { fdSet($0.descriptor, &readFDs) }
Socket.swift:245
  writes.forEach { fdSet($0.descriptor, &writeFDs) }
Socket.swift:249
  errors.forEach { fdSet($0.descriptor, &errorFDs) }
Socket.swift:251
  let maxFD = (reads + writes + errors).map { $0.descriptor }.reduce(0, combine: max)
SynchronousWorker.swift:93
        $0.descriptor != sharedHandler!.pipe[0].descriptor
SynchronousWorker.swift:93
        $0.descriptor != sharedHandler!.pipe[0].descriptor
: Descriptor 0055 0056 class func pipe
Signals.swift:32
    pipe = try Socket.pipe()
() throws -> [Socket] { 0057 var fds: [Int32] = [0, 0] 0058 if system_pipe(&fds) == -1 { 0059 throw SocketError() 0060 } 0061 return [Socket(descriptor: fds[0]), Socket(descriptor: fds[1])] 0062 } 0063 0064 init
Arbiter.swift:19
      let socket = try Socket()
Arbiter.swift:28
      let socket = try Socket(family: AF_UNIX)
(family: Int32 = AF_INET) throws { 0065 #if os(Linux) 0066 descriptor = socket(family, sock_stream, 0) 0067 #else 0068 descriptor = socket(family, sock_stream, family == AF_UNIX ? 0 : IPPROTO_TCP) 0069 #endif 0070 assert(descriptor > 0) 0071 0072 var value: Int32 = 1; 0073 guard setsockopt(descriptor, SOL_SOCKET, SO_REUSEADDR, &value, socklen_t(sizeof(Int32))) != -1 else { 0074 throw SocketError(function: "setsockopt()") 0075 } 0076 0077 #if !os(Linux) 0078 guard setsockopt(descriptor, SOL_SOCKET, SO_NOSIGPIPE, &value, socklen_t(sizeof(Int32))) != -1 else { 0079 throw SocketError(function: "setsockopt()") 0080 } 0081 #endif 0082 } 0083 0084 init
Socket.swift:61
    return [Socket(descriptor: fds[0]), Socket(descriptor: fds[1])]
Socket.swift:61
    return [Socket(descriptor: fds[0]), Socket(descriptor: fds[1])]
Socket.swift:140
    return Socket(descriptor: descriptor)
(descriptor: Descriptor) { 0085 self.descriptor = descriptor 0086 } 0087 0088 func listen
Arbiter.swift:21
      try socket.listen(backlog)
Arbiter.swift:30
      try socket.listen(backlog)
(backlog: Int32) throws { 0089 if system_listen(descriptor, backlog) == -1 { 0090 throw SocketError() 0091 } 0092 } 0093 0094 func bind
Arbiter.swift:20
      try socket.bind(hostname, port: port)
(address: String, port: Port) throws { 0095 var addr = sockaddr_in() 0096 addr.sin_family = sa_family_t(AF_INET) 0097 addr.sin_port = in_port_t(htons(in_port_t(port))) 0098 addr.sin_addr = in_addr(s_addr: address.withCString { inet_addr($0) }) 0099 addr.sin_zero = (0, 0, 0, 0, 0, 0, 0, 0) 0100 0101 let len = socklen_t(UInt8(sizeof(sockaddr_in))) 0102 guard system_bind(descriptor, sockaddr_cast(&addr), len) != -1 else { 0103 throw SocketError() 0104 } 0105 } 0106 0107 func bind
Arbiter.swift:29
      try socket.bind(path)
(path: String) throws { 0108 var addr = sockaddr_un() 0109 addr.sun_family = sa_family_t(AF_UNIX) 0110 0111 let lengthOfPath = path.withCString { Int(strlen($0)) } 0112 0113 guard lengthOfPath < sizeofValue(addr.sun_path) else { 0114 throw SocketError() 0115 } 0116 0117 withUnsafeMutablePointer(&addr.sun_path.0) { ptr in 0118 path.withCString { 0119 strncpy(ptr, $0, lengthOfPath) 0120 } 0121 } 0122 0123 #if os(Linux) 0124 let len = socklen_t(UInt8(sizeof(sockaddr_un))) 0125 #else 0126 addr.sun_len = UInt8(sizeof(sockaddr_un) - sizeofValue(addr.sun_path) + lengthOfPath) 0127 let len = socklen_t(addr.sun_len) 0128 #endif 0129 0130 guard system_bind(descriptor, sockaddr_cast(&addr), len) != -1 else { 0131 throw SocketError() 0132 } 0133 } 0134 0135 func accept
SynchronousWorker.swift:128
    if let client = try? listener.accept() {
() throws -> Socket { 0136 let descriptor = system_accept(self.descriptor, nil, nil) 0137 if descriptor == -1 { 0138 throw SocketError() 0139 } 0140 return Socket(descriptor: descriptor) 0141 } 0142 0143 func close
Arbiter.swift:108
    listeners.forEach { $0.close() }
SynchronousWorker.swift:153
    client.close()
() { 0144 system_close(descriptor) 0145 } 0146 0147 func shutdown
SynchronousWorker.swift:152
    client.shutdown()
() { 0148 system_shutdown(descriptor, Int32(SHUT_RDWR)) 0149 } 0150 0151 func send
Signals.swift:42
    pipe[1].send(".")
SynchronousWorker.swift:161
  client.send("Connection: close\r\n")
SynchronousWorker.swift:178
      client.send("Content-Length: 0\r\n")
SynchronousWorker.swift:182
  client.send("\r\n")
(output: String) { 0152 output.withCString { bytes in 0153 #if os(Linux) 0154 let flags = Int32(MSG_NOSIGNAL) 0155 #else 0156 let flags = Int32(0) 0157 #endif 0158 system_send(descriptor, bytes, Int(strlen(bytes)), flags) 0159 } 0160 } 0161 0162 func write(output: String) { 0163 output.withCString { bytes in 0164 system_write(descriptor, bytes, Int(strlen(bytes))) 0165 } 0166 } 0167 0168 func read
Arbiter.swift:139
        while try signalHandler.pipe[0].read(1).count > 0 {}
HTTPParser.swift:48
      let bytes = try socket.read(nextSize)
(bytes: Int) throws -> [CChar] { 0169 let data = Data(capacity: bytes) 0170 let bytes = system_read(descriptor, data.bytes, data.capacity) 0171 guard bytes != -1 else { 0172 throw SocketError() 0173 } 0174 return Array(data.characters[0..<bytes]) 0175 } 0176 0177 /// Returns whether the socket is set to non-blocking or blocking 0178 var blocking
Signals.swift:36
      socket.blocking = false
SynchronousWorker.swift:55
    listeners.forEach { $0.blocking = false }
SynchronousWorker.swift:129
      client.blocking = true
: Bool { 0179 get { 0180 let flags = fcntl(descriptor, F_GETFL, 0) 0181 return flags & O_NONBLOCK == 0 0182 } 0183 0184 set { 0185 let flags = fcntl(descriptor, F_GETFL, 0) 0186 let newFlags: Int32 0187 0188 if newValue { 0189 newFlags = flags & ~O_NONBLOCK 0190 } else { 0191 newFlags = flags | O_NONBLOCK 0192 } 0193 0194 let _ = fcntl(descriptor, F_SETFL, newFlags) 0195 } 0196 } 0197 0198 /// Returns whether the socket is has the FD_CLOEXEC flag set 0199 var closeOnExec
Signals.swift:35
      socket.closeOnExec = true
: Bool { 0200 get { 0201 let flags = fcntl(descriptor, F_GETFL, 0) 0202 return flags & FD_CLOEXEC == 1 0203 } 0204 0205 set { 0206 let flags = fcntl(descriptor, F_GETFL, 0) 0207 let newFlags: Int32 0208 0209 if newValue { 0210 newFlags = flags ^ FD_CLOEXEC 0211 } else { 0212 newFlags = flags | FD_CLOEXEC 0213 } 0214 0215 let _ = fcntl(descriptor, F_SETFL, newFlags) 0216 } 0217 } 0218 0219 private func htons
Socket.swift:97
    addr.sin_port = in_port_t(htons(in_port_t(port)))
(value: CUnsignedShort) -> CUnsignedShort { 0220 return (value << 8) + (value >> 8) 0221 } 0222 0223 private func sockaddr_cast
Socket.swift:102
    guard system_bind(descriptor, sockaddr_cast(&addr), len) != -1 else {
Socket.swift:130
    guard system_bind(descriptor, sockaddr_cast(&addr), len) != -1 else {
(p: UnsafeMutablePointer<Void>) -> UnsafeMutablePointer<sockaddr> { 0224 return UnsafeMutablePointer<sockaddr>(p) 0225 } 0226 } 0227 0228 0229 func filter
Socket.swift:258
      filter(reads, &readFDs),
Socket.swift:259
      filter(writes, &writeFDs),
Socket.swift:260
      filter(errors, &errorFDs)
(sockets: [Socket], inout _ set: fd_set) -> [Socket] { 0230 return sockets.filter { 0231 fdIsSet($0.descriptor, &set) 0232 } 0233 } 0234 0235 0236 func select
Arbiter.swift:135
    let (read, _, _) = select([signalHandler.pipe[0]], [], [], timeout: timeout)
SynchronousWorker.swift:123
    let (read, _, _) = select(listeners + [sharedHandler!.pipe[0]], [], [], timeout: timeout)
(reads: [Socket], _ writes: [Socket], _ errors: [Socket], timeout: timeval) -> ([Socket], [Socket], [Socket]) { 0237 var timeout = timeout 0238 0239 var readFDs = fd_set() 0240 fdZero(&readFDs) 0241 reads.forEach { fdSet($0.descriptor, &readFDs) } 0242 0243 var writeFDs = fd_set() 0244 fdZero(&writeFDs) 0245 writes.forEach { fdSet($0.descriptor, &writeFDs) } 0246 0247 var errorFDs = fd_set() 0248 fdZero(&errorFDs) 0249 errors.forEach { fdSet($0.descriptor, &errorFDs) } 0250 0251 let maxFD = (reads + writes + errors).map { $0.descriptor }.reduce(0, combine: max) 0252 let result = system_select(maxFD + 1, &readFDs, &writeFDs, &errorFDs, &timeout) 0253 0254 if result == 0 { 0255 return ([], [], []) 0256 } else if result > 0 { 0257 return ( 0258 filter(reads, &readFDs), 0259 filter(writes, &writeFDs), 0260 filter(errors, &errorFDs) 0261 ) 0262 } 0263 0264 // error 0265 return ([], [], []) 0266 } 0267