是否可以從一個套接字上的多個多播組接收數據?訂閱一個套接字上的多個多播組(Linux,C)
例如:
void AddGroup(int sock,
const char* mc_addr_str,
int mc_port,
const char* interface) {
struct sockaddr_in mc_addr;
memset(&mc_addr, 0, sizeof(mc_addr));
mc_addr.sin_family = AF_INET;
mc_addr.sin_addr.s_addr = inet_addr(mc_addr_str);
mc_addr.sin_port = htons(mc_port);
if ((bind(sock, (struct sockaddr *) &mc_addr,
sizeof(mc_addr))) < 0) {
perror("bind() failed");
exit(1);
}
// construct an IGMP join request structure
struct ip_mreq mc_req;
mc_req.imr_multiaddr.s_addr = inet_addr(mc_addr_str);
mc_req.imr_interface.s_addr = inet_addr(interface);
if ((setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(void*) &mc_req, sizeof(mc_req))) < 0) {
perror("setsockopt() failed");
exit(1);
}
}
此代碼的工作,當我添加一個多播羣組。但是當我嘗試添加另一個時,「綁定」失敗。我不太明白爲什麼綁定需要在那裏呢? (但是沒有它,代碼就無法工作)。
理想情況下,我想在同一套接字上多次調用AddGroup。這可能嗎?或者我需要每組一個套接字,然後只使用輪詢?
你是不正確的護理。你可以加入儘可能多的小組,只要你喜歡。加入多播組與識別元組無關。 – EJP 2012-02-13 09:18:49