J'apprends la programmation de socket en c, j'ai écrit ce simple programme pour accepter les connexions sur le port 5072. Je me connecte avec telnet. Cela fonctionne bien la première fois, mais quand j'essaie de le lancer à nouveau immédiatement, il échoue montrant BIND: Adresse déjà utilisée, mais commence à nouveau à travailler après une minute ou deux. Qu'est-ce que je fais?BIND ERREUR: Adresse déjà utilisée
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <stdlib.h>
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);
}
Merci
Veuillez poster le * plus petit * code qui montre le problème. –
désolé, je ne savais pas s'il y avait une erreur dans l'appel de liaison ou la structure du processus enfant, donc j'ai posté le tout. Mais prendra soin de l'avenir. – abhishek