gpt4 book ai didi

c - recv(...) 是否以这种方式运行?

转载 作者:太空狗 更新时间:2023-10-29 15:00:39 25 4
gpt4 key购买 nike

我正在使用 SO_RCVTIMEO 将套接字超时设置为 10 秒。此问题特定于流套接字 (TCP)。当我从手册页中收集到的内容调用 recv(...) 时,这是我所期望的:

  1. 如果 remote 关闭连接,无论超时如何,它都会立即返回 0。
  2. 如果超时到期且未收到数据,则返回 -1 和 EAGAINEWOULDBLOCKerrno
  3. 如果套接字发生错误,它会立即返回 -1,然后正确设置 errno
  4. 如果数据可用,套接字会等待直到超时发生才返回。这次它会在 10 秒内返回接收到的总字节数。

这是正确的行为吗?我只是想确保我正确理解文档。

谢谢!布雷特

最佳答案

  1. 正确。
  2. 有两种不同的规范(遗憾的是我目前无法测试)
    2.1 ETIMEOUT 将被返回。 (如果没有数据立即可用,则在非阻塞套接字上返回 EAGAINEWOULDBLOCK。)http://pubs.opengroup.org/onlinepubs/9699919799/functions/recv.html
    2.2 EAGAINEWOULDBLOCK 将针对 2.1 http://man7.org/linux/man-pages/man2/recvmsg.2.html 中提到的两种可能性返回
  3. 正确。
  4. 如果至少读取了 1 个字节,则套接字可能会随时返回,即使读取的字节数较少并且超时尚未到期。

关于c - recv(...) 是否以这种方式运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20618216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com