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

Linux下epoll中Socket连接进行时getpeername的行为疑问

关于非阻塞Socket连接进行中时getpeername的行为
  • 核心结论:当调用connect()后连接处于进行中状态(通常是非阻塞Socket下返回EINPROGRESS的场景)时,调用getpeername()会返回-1,同时errno会被设置为ENOTCONN,明确表示Socket尚未建立有效连接。
  • 补充说明:
    • 若连接最终成功建立,后续再次调用getpeername()即可正常获取对等方的地址信息。
    • 若连接失败,可通过getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len)获取具体错误码,此时getpeername()同样会返回-1。
  • 对超时关闭方案的建议:
    • 单纯依赖计数器判断超时可行,但结合select()或poll()监听Socket的可写事件会更可靠——当Socket变为可写时,再通过SO_ERROR检查连接是否成功,能及时处理连接完成或失败的情况,避免不必要的等待。
    • 如果坚持使用计数器,需注意在超时后先通过SO_ERROR确认连接仍处于进行中,再关闭Socket,避免误关已经成功建立的连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 07:15:36