我正在学习c语言中的套接字编程,我写了这个简单的程序来接受端口5072上的连接.我使用telnet连接到它.这在第一次工作正常,但是当我尝试再次运行时它立即失败显示BIND:地址已经在使用中,但是在一分钟左右后再次开始工作.我在做什么wromg?
#include#include #include #include #include #include #include int main(){ //variables int listenfd, clientfd; socklen_t clilen; struct sockaddr_in cliaddr,servaddr; //getsocket if((listenfd = socket(AF_INET,SOCK_STREAM,0)) == -1){ perror("SOCKET"); exit(0); } //prep the servaddr bzero(&servaddr,sizeof servaddr); servaddr.sin_family = AF_INET; servaddr.sin_addr.s_addr = inet_addr ("127.0.0.1"); servaddr.sin_port = htons(5072); //bind if(bind(listenfd, (struct sockaddr *) &servaddr,sizeof servaddr)<0){ perror("BIND"); exit(0); } //listen if(listen(listenfd,20)<0){ perror("LISTEN"); exit(0); } //accept int counter = 1; clilen = sizeof cliaddr; while(counter<3){ clientfd = accept(listenfd,(struct sockaddr *) &cliaddr,&clilen); if(clientfd == -1){ perror("ACCEPT"); exit(0); } if(fork()==0){ close(listenfd); printf("CONNECTION NO. %d\n",counter); close(clientfd); exit(0); } counter++; close(clientfd); } close(listenfd); }
谢谢
你必须 setsockopt(SO_REUSEADDR)
请参阅此常见问题解答解释原因.