如果一个C socket的recvmsg()有一个队列,我怎么知道有多少项目在队列中积压?在C中,对于套接字,recvmsg()是否有一个队列?
我的问题是,我从recvmsg()收到的东西后,代码的速度有时慢于发送到recvmsg()的数据的速度,这会在逻辑上导致队列?如果队列变得太大会发生什么?
例如,如果这是我的recv()代码:
while (recvmsg(SocketA,...) > 0)
{
...
...something that takes 1.5 seconds to execute/complete...
...
}
,如果下面的函数在其他地方被调用,每隔1秒钟
// gets called every 1 second
int send_to_sock()
{
...
send(SocketA, ...);
...
}
我查recvmsg的参考页( ),但他们中没有一个提到有关队列的任何内容,但似乎有一个队列,因为我观察到递增累加的延迟。但是,如果队列变得太长,代码将停止工作,所以我想知道是否有办法检查队列的长度。
为什么你有'recv'的函数定义?通常情况下,'recv'是由OS定义的... –
套接字确实有缓冲区。如果这就是你所指的,这可能是有趣的:http://stackoverflow.com/questions/7865069/how-to-find-the-socket-buffer-size-of-linux –
我们,,数据是在你和同伴之间的空间和时间中展开。它在服务器,客户端和中间路由器中排队。它沿着海底光纤在地面站和卫星之间的自由空间中航行。有数据在那里,但你不知道它在哪里或多少。 – ThingyWotsit