绑定到 macOS 10.12 上的套接字时的 NSPOSIXErrorDomain
NSPOSIXErrorDomain when binding to socket on macOS 10.12
我正在 Swift 中使用 CocoaAsyncSocket 绑定到 UDP 套接字并通过本地网络接收消息。
我正在初始化一个套接字,并试图绑定到一个端口,但我收到 NSPOSIXErrorDomain
错误。可能表示某种权限问题?
我的代码:
import Cocoa
import CocoaAsyncSocket
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, GCDAsyncUdpSocketDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
let socket = GCDAsyncUdpSocket.init(delegate: self, delegateQueue: DispatchQueue.main)
do {
try socket.bind(toPort: 53401)
} catch let msg {
NSLog("Error....\(msg)")
}
}
}
完整错误:
Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" UserInfo={NSLocalizedDescription=Operation not permitted, NSLocalizedFailureReason=Error in bind() function}
我认为是生成的 Xcode 权利阻止了绑定。我将这些值更改为 false
,现在绑定有效
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<false/>
<key>com.apple.security.files.user-selected.read-only</key>
<false/>
</dict>
</plist>
您应该启用它的网络功能
在 macOS Catalina 版本 10.15.3:
我正在 Swift 中使用 CocoaAsyncSocket 绑定到 UDP 套接字并通过本地网络接收消息。
我正在初始化一个套接字,并试图绑定到一个端口,但我收到 NSPOSIXErrorDomain
错误。可能表示某种权限问题?
我的代码:
import Cocoa
import CocoaAsyncSocket
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate, GCDAsyncUdpSocketDelegate {
func applicationDidFinishLaunching(_ aNotification: Notification) {
let socket = GCDAsyncUdpSocket.init(delegate: self, delegateQueue: DispatchQueue.main)
do {
try socket.bind(toPort: 53401)
} catch let msg {
NSLog("Error....\(msg)")
}
}
}
完整错误:
Error Domain=NSPOSIXErrorDomain Code=1 "Operation not permitted" UserInfo={NSLocalizedDescription=Operation not permitted, NSLocalizedFailureReason=Error in bind() function}
我认为是生成的 Xcode 权利阻止了绑定。我将这些值更改为 false
,现在绑定有效
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.app-sandbox</key>
<false/>
<key>com.apple.security.files.user-selected.read-only</key>
<false/>
</dict>
</plist>
您应该启用它的网络功能
在 macOS Catalina 版本 10.15.3: