erreur dans la liaison du port “Address already in use” socket TCP programmation sous unix
Je suis passé par de nombreux messages et des forums et je suis nouveau à la programmation socket. De grandes parties de mon code sont similaires à
ERREUR de liaison : Adresse déjà en cours d'utilisation
mais ensuite j'ai modifié mon code pour que je inclure "socket" de la fonction comme ceci:
const char* port="5555";
int opt=1;
portno=atoi(port);
//parameters for server address
serv_addr.sin_family=AF_INET;
serv_addr.sin_port=htons(portno);
serv_addr.sin_addr.s_addr=INADDR_ANY;
//bind the socket to the address
setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(const char *)&opt,sizeof(int));
if(bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
{close(sockfd);
error("error in binding port!");
}
Encore, mais je reçois le message d'erreur. J'ai fermer le terminal et de le redémarrer pour l'utiliser de nouveau le port. Je veux utiliser une codé en dur port (comme je l'ai mentionné dans le code ci-dessus)
Thanks a lot in advance
- Vérifier la valeur retournée par
setsockopt
. - Êtes-vous sûr que vous n'avez pas de s'attarder processus quelque part?
- valeur de retour de setsockopt est 0 lorsque la liaison échoue,cependant, si le serveur est alors la valeur de retour n'est pas affiché.
Vous devez vous connecter pour publier un commentaire.
Un numéro de port ne peut être utilisé que par une seule application à la fois. Cela signifie que vous ne pouvez pas démarrer le même programme à deux reprises attend à se lier à la fois le même port.
La
SO_REUSEADDR
est pour quand le support lié à une adresse a déjà été fermé, la même adresse (adresse ip/port paire) peuvent encore être utilisés directement.Vérifier pour voir si le port est en cours d'utilisation. Soit
telnet
pour que le port ou l'utilisationnetstat -a
. Il doit être en cours d'utilisation (comme le message d'erreur indique) et de tuer le processus approprié. Peut-être en utilisantps
trouver le processus.