Question

J'ai pris Computer Networking le semestre dernier et fait de la programmation C sous Linux (en utilisant gcc) pour mes projets. Une chose extrêmement fastidieuse que je rencontrais sans cesse était que si mon programme tombait en panne ou bloquait (je devais alors appuyer sur Ctrl + C pour le tuer), le port réseau resterait ouvert pendant une minute environ. Donc, si je voulais exécuter le programme immédiatement à nouveau, je devrais d'abord aller dans le fichier d'en-tête, changer le port, refaire le programme, puis enfin l'exécuter. Évidemment, cela devient très fastidieux très rapidement.

Existe-t-il un moyen de le configurer lorsque le port est immédiatement libéré dès que le processus est arrêté? Soit via un paramètre sous linux, soit dans le makefile de mon programme, ou même par programme dans C?

Modifier: je fais référence à lors de l'écriture d'un serveur et du choix d'un port spécifique pour héberger le programme.

Était-ce utile?

La solution

Définissez l'option SO_REUSEADDR sur le socket.

int yes = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int));

De Guide de Beej sur la programmation en réseau .

Autres conseils

Je parie que c'est environ deux minutes :) Comme @Cogsy l'a noté, l'option de socket SO_REUSEADDR est votre ami. Familiarisez-vous avec les états TCP, c’est l’état TIME_WAIT qui vous pose problème:

 

Je suppose que le programme que vous écrivez est un serveur, vous devez donc utiliser un port connu. Si c'est le cas, vous devriez utiliser l'option SO_REUSE_ADDR sur le socket, comme le souligne Cogsy.

Si, par contre, vous écrivez un client sw, vous devez éviter de choisir un port particulier, ce qui permet au système de vous en donner un au hasard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top