首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无阻塞sendto函数

无阻塞sendto函数
EN

Stack Overflow用户
提问于 2016-10-01 08:01:31
回答 2查看 3.2K关注 0票数 0

在我的cpp代码中,我使用阻塞sendto (标志设置为0)函数,该函数的最大值为3微秒,最小为600纳塞克。

我想要一个非阻塞的方法(即立即返回),并且花费更少的时间。

我尝试使用sendto并将标志设置为MSG_DONTWAIT,发现非阻塞sendto在延迟方面与阻塞sendto类似。

请推荐一种非阻塞和时间高效的替代方法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-01 10:07:14

..。最高3微秒,最低600纳塞克。

这是系统将消息放入涉及系统调用的套接字缓冲区所需的时间。这不包括发送到对等程序本身,稍后在内核中完成。这也意味着使用阻塞或非阻塞sendto并不重要,因为在这两种情况下都需要将消息放入套接字缓冲区。这也意味着,selectepollboost::asio或其他任何东西都不会有助于加快速度,因为这不会减少将消息放入套接字缓冲区所需的时间。

阻塞和非阻塞sendto之间的唯一区别是,第一个将等待系统在套接字缓冲区中腾出空间,以防缓冲区已经满,也就是说,如果您发送消息的速度超过了系统发送消息的速度。

您的应用程序到底做了什么还不得而知,但是加速它的一种方法可能是通过使用更大的消息来减少sendto调用的数量。

票数 2
EN

Stack Overflow用户

发布于 2016-10-01 08:21:36

您需要使用select ()epoll()类似的技术来确定套接字何时可以写。在Linux的情况下,请查看相应的man页面。对于平台无关的解决方案,您可以查看libevent库。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39804326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档