- 论坛徽章:
- 0
|
运用netlink方式从kernel层收包,测试的时候,用killall 进程名 杀掉进程,然后再起来此进程时,系统报“bind: Address already in use”的错误,请各位大侠帮忙支下招,谢谢
附上源码:
int creat_netlink_socket(void)
{
int ret = -1,on;
struct sockaddr_nl src_addr;
src_addr.nl_family = AF_NETLINK;
src_addr.nl_pid = 99;
src_addr.nl_groups = 0;
sockfd = socket(PF_NETLINK, SOCK_RAW, 29);
if(sockfd < 0){
perror("socket");
printf("creat netlink socket fail.\n");
}
else
{
on = 1;
if (setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, (char *)&on, sizeof(on)) < 0)
printf("setsockopt SO_REUSEADDR - %m");
ret = bind(sockfd, (struct sockaddr*) &src_addr, sizeof(src_addr));
if( 0 > ret )
perror("bind");
}
return ret;
} |
|