Last active
April 10, 2019 07:50
-
-
Save samdods/31597b445f9ae19d802a909894a951b4 to your computer and use it in GitHub Desktop.
Annotated Swift Server
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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