1) на компе 1 (ОС — CentOS) программа открывает сокет 443 через bind() listen()
2) с компа 2 подсоединяюсь через telnet к открытому сокету 443
3) на компе 1 закрываю приложение
4) на компе 1 "netstat -an -t | grep 443" вижу соединение к компу 2 вот так "tcp 0 0 192.168.220.129:443 192.168.220.1:2591 TIME_WAIT"
5) перезапускаю на компе 1 свое приложение, оно делает
Здравствуйте, maks1180, Вы писали:
M>1) на компе 1 (ОС — CentOS) программа открывает сокет 443 через bind() listen() M>2) с компа 2 подсоединяюсь через telnet к открытому сокету 443 M>3) на компе 1 закрываю приложение M>4) на компе 1 "netstat -an -t | grep 443" вижу соединение к компу 2 вот так "tcp 0 0 192.168.220.129:443 192.168.220.1:2591 TIME_WAIT" M>5) перезапускаю на компе 1 свое приложение, оно делает
M>::socket(AF_INET, SOCK_STREAM, 0); M>int optval = 1; M>::setsockopt(m_socket, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)); M>::setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
M>::bind(m_socket, (sockaddr*) &addr, sizeof(addr)); -> вот здесть получаю ошибку 98, т.е. EADDRINUSE.
M>В чем дело ? что не так, почему REUSEADDR & REUSEPORT не помогают ?
1. достаточно SO_REUSEADDR
2. это должен делать предущих запусках, а не в текущем: т.о. всегда
Re[2]: reuse sokcet on Linux
От:
Аноним
Дата:
27.09.11 08:55
Оценка:
I>1. достаточно SO_REUSEADDR I>2. это должен делать предущих запусках, а не в текущем: т.о. всегда
Закоментировал SO_REUSEPORT, первый запуск сделал с SO_REUSEADDR — все равно тоже самое.
Здравствуйте, Аноним, Вы писали:
I>>1. достаточно SO_REUSEADDR I>>2. это должен делать предущих запусках, а не в текущем: т.о. всегда
А>Закоментировал SO_REUSEPORT, первый запуск сделал с SO_REUSEADDR — все равно тоже самое.
Можете показать strace этого участка с расшифровкой структур?
Здравствуйте, Аноним, Вы писали:
I>>1. достаточно SO_REUSEADDR I>>2. это должен делать предущих запусках, а не в текущем: т.о. всегда
А>Закоментировал SO_REUSEPORT, первый запуск сделал с SO_REUSEADDR — все равно тоже самое.
1. покажите полный код
2. запустите под strace -e trace=network