Add unix domain socket support for bind targets#96
Conversation
Adds a `.unixDomainSocket(path:)` bind target so the server can listen on a UNIX domain socket in addition to host and port. - Add `BindTarget.unixDomainSocket(path:)` and a matching `SocketAddress` case - Bind via `ServerBootstrap.bind(unixDomainSocketPath:)` for both plaintext and secure-upgrade channels, and report the bound path from `listeningAddresses` - Remove the socket file on shutdown; fail the bind if the path is already occupied so a stale socket is never silently reused - Support a `socketPath` key in swift-configuration, mutually exclusive with `host`/`port` Resolves swift-server#69
|
For #69 I used a struct-backed Do you think it makes sense to expose it as a plain |
| /// ```swift | ||
| /// let target = BindTarget.unixDomainSocket(path: "/tmp/server.sock") | ||
| /// ``` | ||
| public static func unixDomainSocket(path: String) -> Self { |
There was a problem hiding this comment.
This should probably use the new FilePath type once it becomes available
There was a problem hiding this comment.
This should probably use the new
FilePathtype once it becomes available
In the UDS bind support the socket path has two different types depending on direction: on input we take a FilePath (BindTarget.unixDomainSocket(path:)), but on output we expose it as String (SocketAddress.unixDomainSocketPath, mirroring NIOCore.SocketAddress.pathname). If we commit to FilePath, I'd lean toward using it on output too for consistency — but keeping String also makes sense since that's just what NIO reports back. Which way should we go?
Adds a
.unixDomainSocket(path:)bind target so the server can listen on a UNIX domain socket in addition to host and port.BindTarget.unixDomainSocket(path:)and a matchingSocketAddresscaseServerBootstrap.bind(unixDomainSocketPath:)for both plaintext and secure-upgrade channels, and report the bound path fromlisteningAddressessocketPathkey in swift-configuration, mutually exclusive withhost/portResolves #69