当前位置: 技术问答>linux和unix
udp 出现address already in use
来源: 互联网 发布时间:2016-05-29
本文导语: 我就是模仿unix网络编程上写了一个很简单的时间服务器的例子,用udp实现,如果有udp请求就发送当前时间给客户,可是运行一次成功后,关掉进程,入过在运行的话出现address already in use 关掉进程等了很长时间还是...
我就是模仿unix网络编程上写了一个很简单的时间服务器的例子,用udp实现,如果有udp请求就发送当前时间给客户,可是运行一次成功后,关掉进程,入过在运行的话出现address already in use
关掉进程等了很长时间还是这样,
关掉进程等了很长时间还是这样,
# include "unp.h"
int udp_server(const char *host,const char *serv,socklen_t *addrlenp)
{
int sockfd,n;
struct addrinfo hints,*res,*ressave;
bzero(&hints,sizeof(hints));
hints.ai_socktype=SOCK_DGRAM;
hints.ai_flags=AF_UNSPEC;
hints.ai_flags=AI_PASSIVE;
if((n=getaddrinfo(host,serv,&hints,&res))!=0)
{
err_quit("get addrinfo error %s",gai_strerror(n));
}
ressave=res;
do
{
if((sockfd=socket(res->ai_family,res->ai_socktype,res->ai_protocol))ai_addr,res->ai_addrlen)ai_addr,res->ai_addrlen));
close(sockfd);
continue;
}
else
break;
}while(res=res->ai_next);
if(NULL==res)
{
printf("udp_server errorn");
return -1;
}
if(addrlenp)
*addrlenp=res->ai_addrlen;
freeaddrinfo(ressave);
return sockfd;
}
int main(int argc,char **argv)
{
int sockfd,n;
time_t ticks;
socklen_t len;
char sendline[MAXLINE];
SIN cliaddr;
/*char *host[100];
char *servlen[100];
SIN addr;*/
if(argc!=3)
err_quit("usage client host service");
if((sockfd=udp_server(argv[1],argv[2],&len))