在Linux中,如果使用Berkeley原始套接字(也称作raw socket)来进行网络编程,那么会遇到一个问题,即多个程序同时使用同一个套接字会导致冲突。此时需要对Berkeley原始套接字进行独占访问。下面是一个可行的解决方法。
mknod /dev/raw_socket c 10 200
chown root:raw_socket /dev/raw_socket
chmod 660 /dev/raw_socket
#include
#include
...
int sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_UDP);
int on = 1;
ioctl(sockfd, SIOCSRAW, &on);
...
通过这种方法,在使用Berkeley原始套接字时,可确保多个程序不能同时访问同一个套接字,从而避免冲突。