bind EADDRINUSE
От: gwg-605 Россия  
Дата: 25.08.19 17:33
Оценка:
Столкнулся с такой проблемой:
m_Socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ;
const sockaddr& addr = local.GetSockaddr() ;
// 0.0.0.0:30000
bind( m_Socket, &addr, local.AddressSize( addr ) ) ;
listen( m_Socket, 100 ) ;
// do something
close( m_Socket ) ;

Потом делаю похожую вещь:
m_Socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP ) ;
const sockaddr& addr = local.GetSockaddr() ;
// 127.0.0.1:30000
bind( m_Socket, &addr, local.AddressSize( addr ) ) ;
// bind returns EADDRINUSE

Если подождать несколько секунд перед второй частью, то ошибки не будет, если делать без задержки, то получаю такую ошибку. Система Ubuntu 16.04. Я так понимаю система не дает переиспользовать порт какое-то время. Это можно как-то обойти?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.