- 論壇徽章:
- 0
|
我的環(huán)境是這樣的,udp服務端,給很多客戶端發(fā)廣播包,一個設備可以開幾個客戶端,每個客戶端只接受指定網(wǎng)卡的信息。
就是客戶端要綁定網(wǎng)卡。原先的udp客戶端我知道可以綁定特定地址,但我的客戶端也是個dhcp客戶端,經(jīng)常改變地址,怎么才能綁定網(wǎng)卡口而不是地址呢
現(xiàn)在的客戶端代碼如下:
/* 創(chuàng)建socket */
if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
perror("Create Socket Failed");
exit(1);
}
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) == -1) {
perror("Setsockopt Error");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr = htonl(INADDR_ANY); /*應該經(jīng)常改變地址,地址也可能為0,這里不好直接獲取地址來綁定*/
server_addr.sin_port = htons(DHCP_PORT);
/* 綁定套接口 */
if (bind(sockfd, (struct sockaddr*) &server_addr,sizeof(server_addr)) == -1) {
perror("Server Bind Failed");
exit(1);
}
/*接受包*/
while (1) {
if (recvmsg(sockfd, &msg, 0) == -1) {
perror("Recv Error");
continue;
}
if (dhcp.option == htonl(DHCP_OPTION)) {
if ((int) dhcpcpid != 0) {
kill(dhcpcpid, SIGUSR1);
}
}
} |
|