gpt4 book ai didi

我可以获得套接字缓冲区剩余大小吗?

转载 作者:行者123 更新时间:2023-11-30 15:40:16 25 4
gpt4 key购买 nike

我有一个实时系统,所以我使用非阻塞套接字发送数据但发生了套接字缓冲区已满的情况,所以发送函数的返回值小于我的数据长度。

如果我保存返回长度并重新发送,与阻塞套接字没有什么不同吗?

那么我可以获得套接字缓冲区的剩余大小吗?我可以先检查一下如果足够,那么我调用发送,跳过其他发送。

谢谢大家。

最佳答案

阻塞和非阻塞之间是有区别的 - 如果您遇到短写入,则不会阻塞。这就是非阻塞的全部意义。它让您有机会在等待一些缓冲区空间释放的同时做一些更紧迫的事情。

您的担忧似乎是反复尝试编写完整的消息,即一种轮询形式。但是检查缓冲区中的空闲字节是同样的事情,您只需将对可用性的调用替换为对 write 的调用即可。您确实没有获得任何效率方面的好处。

对此的常见解决方案是使用诸如 selectpoll 之类的东西来监视套接字描述符是否能够写入(至少是一些)字节。这允许您停止轮询并将部分工作交给内核来监控空间可用性。

也就是说,如果您确实想检查有多少可用空间,通常有一些针对特定于平台的解决方法,主要是使用各种特定于平台的参数(例如 )进行 ioctl 调用FIONWRITESIOCOUTQ 等。您需要准确调查您的平台提供的功能。但是,再次强调,最好首先考虑一下这是否真的是您所需要的。

关于我可以获得套接字缓冲区剩余大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077311/

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