reuse sokcet on Linux
От: maks1180  
Дата: 26.09.11 21:53
Оценка:
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 свое приложение, оно делает

::socket(AF_INET, SOCK_STREAM, 0);
int optval = 1;
::setsockopt(m_socket, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval));
::setsockopt(m_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));

::bind(m_socket, (sockaddr*) &addr, sizeof(addr)); -> вот здесть получаю ошибку 98, т.е. EADDRINUSE.

В чем дело ? что не так, почему REUSEADDR & REUSEPORT не помогают ?
===============================================
(реклама, удалена модератором)
Re: reuse sokcet on Linux
От: ilnar Россия  
Дата: 27.09.11 08:03
Оценка:
Здравствуйте, 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 — все равно тоже самое.
Re[3]: reuse sokcet on Linux
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 27.09.11 09:04
Оценка:
Здравствуйте, Аноним, Вы писали:

I>>1. достаточно SO_REUSEADDR

I>>2. это должен делать предущих запусках, а не в текущем: т.о. всегда

А>Закоментировал SO_REUSEPORT, первый запуск сделал с SO_REUSEADDR — все равно тоже самое.


Можете показать strace этого участка с расшифровкой структур?
The God is real, unless declared integer.
Re[3]: reuse sokcet on Linux
От: ilnar Россия  
Дата: 27.09.11 09:36
Оценка:
Здравствуйте, Аноним, Вы писали:

I>>1. достаточно SO_REUSEADDR

I>>2. это должен делать предущих запусках, а не в текущем: т.о. всегда

А>Закоментировал SO_REUSEPORT, первый запуск сделал с SO_REUSEADDR — все равно тоже самое.


1. покажите полный код
2. запустите под strace -e trace=network
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.