- 论坛徽章:
- 0
|
我的环境是这样的,udp服务端,给很多客户端发广播包,一个设备可以开几个客户端,每个客户端只接受指定网卡的信息。
就是客户端要绑定网卡。原先的udp客户端我知道可以绑定特定地址,但我的客户端也是个dhcp客户端,经常改变地址,怎么才能绑定网卡口而不是地址呢
现在的客户端代码如下:
/* 创建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); /*应该经常改变地址,地址也可能为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);
}
}
} |
|