当前位置:  开发笔记 > 编程语言 > 正文

BIND ERROR:地址已被使用

如何解决《BINDERROR:地址已被使用》经验,为你挑选了1个好方法。

我正在学习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); 
} 

谢谢



1> Kimvais..:

你必须 setsockopt(SO_REUSEADDR)

请参阅此常见问题解答解释原因.

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有