0001 #if os(Linux)
0002 import Glibc
0003 #else
0004 import Darwin
0005 #endif
0006
0007 public class HTTP {
0008 public var serverSocket| HTTP.swift:31 | serverSocket = socket(AF_INET, Int32(SOCK_STREAM), 0) |
| HTTP.swift:33 | if (serverSocket > 0) { |
| HTTP.swift:54 | setsockopt(serverSocket, SOL_SOCKET, SO_RCVBUF, &bufferSize, socklen_t(sizeof(Int))) |
| HTTP.swift:58 | setsockopt(serverSocket, SOL_SOCKET, SO_NOSIGPIPE, &noSigPipe, socklen_t(sizeofValue(noSigPipe))) |
| HTTP.swift:61 | let serverBind = bind(serverSocket, sockaddr_cast(&serverAddress), socklen_t(UInt8(sizeof(sockaddr_in)))) |
: Int32 = 0
0009 public var serverAddress| HTTP.swift:45 | serverAddress = sockaddr_in( |
| HTTP.swift:61 | let serverBind = bind(serverSocket, sockaddr_cast(&serverAddress), socklen_t(UInt8(sizeof(sockaddr_in)))) |
: sockaddr_in?
0010 var bufferSize| HTTP.swift:54 | setsockopt(serverSocket, SOL_SOCKET, SO_RCVBUF, &bufferSize, socklen_t(sizeof(Int))) |
: Int = 1024
0011
0012 func sockaddr_cast| HTTP.swift:61 | let serverBind = bind(serverSocket, sockaddr_cast(&serverAddress), socklen_t(UInt8(sizeof(sockaddr_in)))) |
(p: UnsafeMutablePointer<Void>) -> UnsafeMutablePointer<sockaddr> {
0013 return UnsafeMutablePointer<sockaddr>(p)
0014 }
0015
0016 public func echo(socket: Int32, _ output: String) {
0017 output.withCString { (bytes) in
0018 #if os(Linux)
0019 let flags = Int32(MSG_NOSIGNAL)
0020 #else
0021 let flags = Int32(0)
0022 #endif
0023 send(socket, bytes, Int(strlen(bytes)), flags)
0024 }
0025 }
0026
0027 public init(port: UInt16) {
0028 #if os(Linux)
0029 serverSocket = socket(AF_INET, Int32(SOCK_STREAM.rawValue), 0)
0030 #else
0031 serverSocket = socket(AF_INET, Int32(SOCK_STREAM), 0)
0032 #endif
0033 if (serverSocket > 0) {
0034 print("Socket init: OK")
0035 }
0036
0037 #if os(Linux)
0038 serverAddress = sockaddr_in(
0039 sin_family: sa_family_t(AF_INET),
0040 sin_port: port.htons(),
0041 sin_addr: in_addr(s_addr: in_addr_t(0)),
0042 sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)
0043 )
0044 #else
0045 serverAddress = sockaddr_in(
0046 sin_len: __uint8_t(sizeof(sockaddr_in)),
0047 sin_family: sa_family_t(AF_INET),
0048 sin_port: port.htons(),
0049 sin_addr: in_addr(s_addr: in_addr_t(0)),
0050 sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)
0051 )
0052 #endif
0053
0054 setsockopt(serverSocket, SOL_SOCKET, SO_RCVBUF, &bufferSize, socklen_t(sizeof(Int)))
0055
0056 #if !os(Linux)
0057 var noSigPipe : Int32 = 1
0058 setsockopt(serverSocket, SOL_SOCKET, SO_NOSIGPIPE, &noSigPipe, socklen_t(sizeofValue(noSigPipe)))
0059 #endif
0060
0061 let serverBind = bind(serverSocket, sockaddr_cast(&serverAddress), socklen_t(UInt8(sizeof(sockaddr_in))))
0062 if (serverBind >= 0) {
0063 print("Server started at port \(port)")
0064 }
0065 }
0066 }
0067
0068 extension CUnsignedShort {
0069 func htons| HTTP.swift:48 | sin_port: port.htons(), |
() -> CUnsignedShort { return (self << 8) + (self >> 8); }
0070 }
0071