Libérant lié ports de sortie du processus
Comment faire en sorte qu'une prise lié à un port est correctement publiés sur le processus de sortie tels que le port peut être réutilisé sans bind()
à défaut avec EADDRINUSE? J'ai écrit un petit programme qui crée une socket, le lie à un port fixe, vous attend pour une connexion, puis se termine immédiatement. Quand je exécutez à nouveau le programme, le bind()
appel échoue avec EADDRINUSE, mais si j'attends quelques minutes, il réussit.
Est-il une manière que je peux explicitement "unbind" la socket, libérant ainsi le numéro de port?
Vous devez vous connecter pour publier un commentaire.
À l'aide de SO_REUSEADDR option de socket va vous permettre de re-démarrer le programme sans délai.
Pile TCP/IP de garde port occupé pendant un certain temps, même après
close()
- socket va rester dansTIME_WAIT
etTIME_WAIT2
état.Si je ne me trompe pas, habituellement, cela prend 2 minutes, donc si vous avez besoin d'utiliser le même port immédiatement
SO_REUSEADDR
option sur votre support avant de liaison, tout comme Ivo Bosticky suggéré.Pas exactement la réponse à votre question, mais pour l'exhaustivité:
Sur Windows, vous pouvez définir le
TcpTimedWaitDelay valeur de registre pour définir le délai d'attente pour la libération de fermé les connexions TCP à aussi peu que 30 secondes.