非阻塞UDP示例
int udp_server_init(char *netAddr, int port)
{
iSocketFd = socket(AF_INET, SOCK_DGRAM, 0);//create a ucp socket file
if(-1 == iSocketFd){
printf("create socket fd err:%s\n", strerror(errno));
return -1;
}
int on = 1;
struct timeval timeout={2,5};//timeout
if((-1 == setsockopt(iSocketFd,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on))) || //allow up serval server program
(-1 == setsockopt(iSocketFd,SOL_SOCKET,SO_SNDTIMEO,&timeout,sizeof(timeout))) ||
(-1 == setsockopt(iSocketFd,SOL_SOCKET,SO_RCVTIMEO,&timeout,sizeof(timeout)))){
printf("setsockopt err:%s\n", strerror(errno));
return -1;
}
//create socket addr struct
struct sockaddr_in server_addr;
memset(&server_addr, 0, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = port;
if(NULL == netAddr){
server_addr.sin_addr.s_addr = htonl(INADDR_ANY);//accept all interface of host
} else {
server_addr.sin_addr.s_addr = inet_addr(netAddr); //accept one interface of host
}
if(-1 == bind(iSocketFd, (struct sockaddr*)&server_addr, sizeof(server_addr))){
printf("bind error:%s\n", strerror(errno));
return -1;
}
return 0;
}最后更新于