CommandLineToolkit
30 строк · 989.0 Байт
1import Foundation
2
3public enum LaunchdSocketActivation {
4/// Read `man launch_activate_socket`.
5/// - Parameter name: The name of the socket entry in the service's Sockets dictionary.
6/// - Throws:`LaunchdSocketActivationError`
7/// - Returns: a set of file descriptors corresponding to a socket service that launchd(8) has created and advertised on behalf of the job
8public static func activateSocket(name: String) throws -> [Int32] {
9#if os(macOS)
10var ld_sockets = UnsafeMutablePointer<Int32>.allocate(capacity: 0)
11defer {
12ld_sockets.deallocate()
13}
14var count: size_t = 0
15
16let err = launch_activate_socket(name, &ld_sockets, &count)
17guard err == 0 else {
18throw LaunchdSocketActivationError.errorCode(err)
19}
20
21var fds = [Int32]()
22for i in 0 ..< count {
23fds.append(ld_sockets[i])
24}
25return fds
26#else
27return []
28#endif
29}
30}
31