Skip to content

Instantly share code, notes, and snippets.

@samdods
Last active April 10, 2019 07:50
Show Gist options
  • Save samdods/31597b445f9ae19d802a909894a951b4 to your computer and use it in GitHub Desktop.
Save samdods/31597b445f9ae19d802a909894a951b4 to your computer and use it in GitHub Desktop.
Annotated Swift Server
// 1. Create a socket reference
let sock = socket(AF_INET, SOCK_STREAM, 0) // or use AF_INET6 for IPv6
guard sock >= 0 else {
fatalError("Failed to open socket")
}
// 2. Set socket options
// (SO_REUSEADDR allows reusing the port if server was shutdown while port active)
var reuse: Int32 = 1
let length = socklen_t(MemoryLayout<Int32>.size)
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &reuse, length)
// 3: Bind the socket to an IP address and port number
var address = sockaddr_in()
let size = socklen_t(MemoryLayout<sockaddr_in>.size)
let portNumber = 8080
address.sin_family = sa_family_t(AF_INET) // or use AF_INET6 for IPv6
address.sin_port = in_port_t(portNumber).bigEndian
address.sin_addr.s_addr = INADDR_ANY // bind to any interface (makes your socket available publicly)
guard bind(sock, &address, size) >= 0 else {
fatalError("Failed to bind")
}
// 4: Listen on the socket
guard listen(sock, SOMAXCONN) >= 0 else {
fatalError("Listen failed")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment