gpt4 book ai didi

sockets - 如何在非阻塞套接字上设置发送超时?

转载 作者:行者123 更新时间:2023-12-02 15:45:29 25 4
gpt4 key购买 nike

我在理解 Linux 中套接字的工作时遇到一些问题。

setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(int));
write = write(sockfd, buf, len);

在上面的代码中,由于写入被缓冲,发送超时没有任何意义(当用户空间缓冲区复制到内核缓冲区时,写入系统调用将立即返回)。发送缓冲区大小是更重要的参数,但发送超时似乎没有任何值(value)。但我肯定错了,因为我见过很多使用 SO_SNDTIMEO 的代码。假设接收器非常慢,用户空间代码如何使用 SO_SNDTIMEO 超时?

最佳答案

How is it possible to have send timeout on a non blocking socket?

事实并非如此。超时用于阻塞模式。非阻塞 recv()send() 不会阻塞,因此也不会超时。

I have seen a lot of code which uses SO_SNDTIMEO.

不在非阻塞模式下,除非相关代码是无意义的。

如果您希望在非阻塞模式下超时,这就是 select() 中超时的用途之一。

关于sockets - 如何在非阻塞套接字上设置发送超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13556972/

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