Имитация дисконнектов и восстановление коннекта
От: Asmenok  
Дата: 20.11.03 08:14
Оценка:
Проблема такая:
Передается на сервак пакет, длтной , скажем 100 байт.
При передачи этого пакета n раз вызывается дисконнект:


shutdown (m_sockReader, 2);
closesocket(m_sockReader);

//восстанавливаем коннект 

sReader = socket( AF_INET, SOCK_STREAM, 0 );

struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = inet_addr( sHost.c_str() );

addr.sin_port = htons(iPortReader);
if( connect( sReader, (sockaddr*)&addr, sizeof( struct sockaddr_in) ) == SOCKET_ERROR )
{
    return false;
}


так вот , часто возникает такая ситуация, что после некоторого кол-ва успешных реконнектов очередной коннект не проходит уже и WSAgetlastError пишет ошибку 10048 "Only one usage of each socket address (protocol/network address/port) is normally permitted. "
netstat показывает кучу открытых портов, они остаются висеть даже после закрытия сервера и клиента, и эти соединения исчезают через 1-2 минуты.


Можно ли что-нибудь тут сделать, или нужно жать 1-2 минуты закрытия соединений?

И еще вопрос : стоит ли вызывать после closesocket WSAclenup или достаточно использовать только closesocket?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.