You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS下nw_protocol_socket_set_no_wake_from_sleep报错求助

解决macOS WebSocket客户端的nw_protocol_socket_set_no_wake_from_sleep警告

警告含义解析

这个警告来自苹果Network.framework底层,是系统尝试给WebSocket套接字设置SO_NOWAKEFROMSLEEP选项时失败导致的。该选项用于控制套接字的网络活动是否唤醒睡眠中的设备,但并非所有网络环境(如部分以太网接口、旧版macOS系统)都支持这个选项,错误码22表示传入的参数无效。重点:这个警告是非致命的,不会影响WebSocket的连接、消息发送和接收功能。

解决方案

1. 过滤警告(推荐)

如果只是不想看到这个警告,可以在Xcode的Scheme设置中添加环境变量屏蔽Network框架的冗余日志:

  • 打开Xcode,选择Product > Scheme > Edit Scheme
  • 切换到Run标签页,选择Arguments
  • 在Environment Variables中添加:
    • 变量名:NW_LOG_LEVEL,值:error(仅显示错误级别的日志)
    • 或者全局屏蔽系统活动日志:变量名OS_ACTIVITY_MODE,值disable(会关闭所有系统级日志,按需选择)

2. 调整URLSession配置

尝试修改URLSession配置,避免触发该选项的设置:

init(url: URL) {
    self.url = url
    let config = URLSessionConfiguration.default
    config.allowsExpensiveNetworkAccess = true
    config.allowsConstrainedNetworkAccess = true
    // 禁用后台唤醒相关模式,减少底层设置触发
    config.shouldUseExtendedBackgroundIdleMode = false
    // 根据业务需求调整,若不需要等待网络连接可关闭
    config.waitsForConnectivity = false
    
    let session = URLSession(configuration: config, delegate: nil, delegateQueue: .main)
    
    webSocketTask = session.webSocketTask(with: url)
    connect()
}

3. 代码优化建议(避免潜在问题)

你的WebSocket代码存在一些可优化点,能避免后续内存泄漏或异常:

  • 使用weak self避免循环引用:
func receiveMessages() {
    webSocketTask.receive { [weak self] result in
        guard let self = self else { return }
        print("RECEIVED MESSAGE \(result)")
        switch result {
        case .success(let message):
            print(message)
            self.messageReceivedHandler?(message)
            self.receiveMessages()
        case .failure(let error):
            print("Error receiving message \(error)")
            // 仅在非主动取消的情况下重新尝试接收
            if error.code != .cancelled {
                self.receiveMessages()
            }
        }
    }
}
  • 添加断开连接方法,主动清理资源:
func disconnect() {
    webSocketTask.cancel(with: .normalClosure, reason: nil)
    webSocketTask = nil
}

内容的提问来源于stack exchange,提问作者octopus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 17:33:12