我正在使用select()
来侦听多个套接字上的数据。当我收到有关可用数据的通知时,我应该read()
多少?
我可以遍历read()
,直到没有更多数据,处理数据,然后返回到选择循环。但是,我可以想象套接字收到如此多的数据以至于暂时“饿死”了其他套接字。特别是因为我正在考虑使用select也用于线程间通信(消息传递方式),我想保持低延迟。这实际上是一个问题吗?
另一种方法是始终读取固定大小的字节,然后返回循环。当有更多数据可用而不适合我的缓冲区时,这里的缺点会增加。
这里的最佳做法是什么?
答案 0 :(得分:0)
不确定这是如何在其他平台上实现的,但在Windows上,ioctlsocket(FIONREAD)
调用会告诉您一次调用recv()
可以读取多少字节。实际调用recv()
时,套接字队列中可能有更多字节。下一次调用select()
将报告套接字仍然可读。
答案 1 :(得分:0)