2013-02-04 21 views
0

我在那里通过UDP套接字有事时发送一个字节的消息从一个进程到另一个系统。在接受方面,这件事情发生一次还是一次甚至是一百万次都不重要。我认为也许我可以使用setsockopt将SO_RCVBUF设置为1,我希望系统可以忽略除第一条消息之外的所有内容(直到它被读取,从而允许另一个)。然而,谷歌搜索发现一些证据表明,这可能不是100%可移植的(它看起来像一些系统可能安静地执行最小尺寸?)。我可以设置SO_RCVBUF 1对UDP套接字

所以我才去试图这样,如果有人知道这将是多么容易的工作我想知道的工作?如果有任何问题,这在Red Hat Linux上。

+0

我不明白你为什么认为你必须做很多无用的recvfrom()调用。您只需制作一个,就可以看到,然后您可以关闭插槽。 – EJP

回答

1

在linux上,实际大小约在SOCK_MIN_RCVBUFsysctl_rmem_max之间,但调用setsockopt永远不会失败。见here。这包括开销,其中包括struct sk_buff

SOCK_MIN_RCVBUF值是:

#define SOCK_MIN_RCVBUF (2048 + sizeof(struct sk_buff)) 

至于你想做的事:据我所知,有没有办法来清除接收缓冲区没有阅读(或关闭套接字)。

0

您正在承担SO_RCVBUF在应用数据的字节计算。对于UDP,它不在我知道的任何平台上。

+0

什么是测量?数据报? – EJP

+0

它有所不同。在某些平台上,这是用于保存数据报的空间量,包括源IP地址和端口。在其他方面,它完全是任意单位。 (例如,它可能被一个数量分割,这就是它将保存多少个数据报或者乘以一个数量,这个数量是它将容纳的原始数据的多少字节。) –