Затваряне на слушащ TCP сокет в C

Да предположим, че имате сокет, който слуша TCP порт, и някои клиенти са свързани. Когато някой издаде sock_close(fd) в C и се опита да се обвърже отново на същия порт, обвързването е неуспешно. Някои състояния TIME_WAIT се виждат на "netstat -plutnoa", като например:

tcp        0      0 127.0.0.1:4567          127.0.0.1:32977         TIME_WAIT   -                timewait (17.12/0/0)

И така, как човек може правилно да изключи сървърния сокет и да се свърже отново на същия порт веднага?


person whoi    schedule 04.10.2010    source източник
comment
Намерих SO_REUSEADDR, проверявам го сега...   -  person whoi    schedule 04.10.2010


Отговори (1)


Искате да използвате опцията SO_REUSEADDR на сокета. Съответната страница с ръководство е socket(7). Ето пример за използването му. Този въпрос обяснява какво се случва.

person Matt Joiner    schedule 04.10.2010
comment
Публикация в блога на CloudFlare също може да предостави някои полезни мисли относно SO_REUSEADDR. blog.cloudflare.com/its-crowded-in-here - person Ron Burk; 02.10.2020