【发布时间】:2012-05-30 06:34:37
【问题描述】:
我过去曾使用 poll ,其中服务器有多个连接的文件描述符,但是在想要监听各种多播组的情况下如何使用 poll 呢?据我了解,这将需要多个 upd 套接字想要在加入一个组后调用 recvfrom,但从不连接这些套接字。无论如何,一个人是否会轮询这些描述符,然后在事件触发时调用 recvfrom?网络上有什么简单的小例子吗?
谢谢
【问题讨论】:
标签: network-programming multicast
我过去曾使用 poll ,其中服务器有多个连接的文件描述符,但是在想要监听各种多播组的情况下如何使用 poll 呢?据我了解,这将需要多个 upd 套接字想要在加入一个组后调用 recvfrom,但从不连接这些套接字。无论如何,一个人是否会轮询这些描述符,然后在事件触发时调用 recvfrom?网络上有什么简单的小例子吗?
谢谢
【问题讨论】:
标签: network-programming multicast
轮询是完全一样的 - 你等待你的几个套接字中的任何一个变得可读,找出哪个是可读的,然后调用recv(2) 或诸如此类。与 TCP 的不同之处在于,UDP 套接字上的每次读取都会恰好出列一个数据报,所以这更容易一些。
您放入轮询集中的套接字通常设置为非阻塞,在这种情况下您需要处理来自recv(2) 的EWOULDBLOCK 错误。
还要记住 UDP 是不可靠的,所以如果你没有足够快地使用这些数据报,它们会填满套接字接收缓冲区并且内核开始丢弃它们。
【讨论】: