gpt4 book ai didi

c - 非阻塞 TCP 套接字处理 - 如何在写入套接字之前检测阻塞状态?

转载 作者:可可西里 更新时间:2023-11-01 02:49:39 24 4
gpt4 key购买 nike

我目前正在编写一个从一个套接字读取并在另一个套接字上写入的代理应用程序。两者都设置为非阻塞,允许处理多个套接字对。

为了控制套接字之间的正确流程,如果目标套接字上的写入可能会阻塞,应用程序不应从源套接字读取。这个想法很好,但是我发现如果不先写入目标套接字就无法检测到它的阻塞状态……这不是我们所需要的。

我知道有一个选项可以使用 SIOCOUTQ(使用 ioctl())并计算剩余缓冲区,但与简单检查目标套接字是否匹配相比,这看起来很难看可以开始写作了。

我想我也可以只对这个套接字使用 select(),但这对如此繁重的系统调用来说太浪费了。

最佳答案

selectpoll 应该可以给你信息。
我假设您已经在使用其中之一来检测您的哪个读取套接字有数据
当你有一个可供读的读套接字时,将其替换为相应的写套接字(但当然要放在写 fds 中),然后再次调用 select。然后,如果写套接字可用,就可以读写了。

请注意,写入套接字可能已准备好获取数据,但没有您想要的那么多。因此,您可能设法读取 100 个字节,而只写入 50 个。

关于c - 非阻塞 TCP 套接字处理 - 如何在写入套接字之前检测阻塞状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9148178/

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