Mac app socket server

在macOS app 上创建socket server

发现创建失败

抛出异常代码如下

1
try checkNotMinus1{ Darwin.bind(ipv4Socket, addrPtr, UInt32(MemoryLayout<sockaddr_in>.size))
1
2
3
4
5
6
7
8
9
/// 封装检测是否为-1
/// errno 为Darwin的错误码
enum SocketError: Error { case socketCreateFailed(Int32) }
@discardableResult
func checkNotMinus1(_ f: () -> Int32) throws -> Int32 {
let r = f()
guard r != -1 else { throw SocketError.socketCreateFailed(errno) }
return r
}

catch中的error 为ssocketCreateFailed(1)

也就是errno为1

⌘左键 进入代码定义(Jump to Definition)

发现只有定义没有注释,能看到他是定义在Darwin中

打开Darwin-xnu

找到errno.h (<sys/errno.h>)

image-20191226164140765

发现错误码为1 对应 Operation not permitted

我是使用Xcode的版本 Version 11.2.1 (11B500)

image-20191226164913282

新版Xcode会把app 的能力单独一页列出来

当我勾选Network 的 Server选项后 bind成功了