gpt4 book ai didi

c++ - 在阻塞模式下从套接字读取所有可用字节的最佳方式,C++

转载 作者:太空宇宙 更新时间:2023-11-04 10:22:55 25 4
gpt4 key购买 nike

从阻塞套接字中读取所有可用字节的最佳方法是什么? “可用”意味着服务器响应是一堆文本行(每个文本行都有“\n”),而 EOF 是带有一些前缀的行。这个回复的长度总是不同的,所以我在阅读之前不知道。我假设使用 select() (poll, epoll) 然后 'ioctl(FIONREAD)' 是最好的方式,我是对的吗?或者可能只是在那一刻阅读所有可用的内容,然后检查是否达到了 EOF,如果没有,则再次重复所有内容?是的,这听起来更理性。这一切有意义吗?那么,最有效的方法是什么?

最佳答案

如果您正在进行阻塞读取,那么使用 select/epoll 没有什么意义。

ioctl(FIONREAD) 是一个非常无用的调用,因为当它返回更多数据时,可能已经到达内核套接字缓冲区。

阻塞读取很简单:只需继续读取您的用户空间套接字缓冲区,直到找到消息终止符。

理想情况下,您使用的网络组件不应该关心套接字是处于阻塞还是非阻塞模式:应该有一个函数在套接字准备好读取时调用。在阻塞模式下,无论套接字是否准备就绪,您都可以调用此函数,如果没有可用数据,它只会在 read 时阻塞。

关于c++ - 在阻塞模式下从套接字读取所有可用字节的最佳方式,C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43110921/

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