Help!
- From
- George Hazan ()
- To
- All
- Date
- 2001-04-23T17:58:47Z
- Area
- SU.WINDOWS.NT.PROG
Приветствую.
Дано: две NT, станция и сервер, обменивающиеся сериями пакетов на
TCP-соединении. В какой-то момент сервер начинает непрерывную передачу (около
30К), клиент его внимательно слушает.
Если сервер использует синхронные сокеты, все нормально всегда.
При изменении типа сокета на асинхронный пропадает один айпишный пакет в
районе 23-24 килобайта. Если сервер и клиент на одной и той же машине - все
работает. Ситуация устойчиво повторябельна. Код отправки вот такой:
int TCPIPConn::SendBuffer( const char* data, HSize len )
{
fd_set tSocketSet;
tSocketSet.fd_count = 1;
tSocketSet.fd_array[ 0 ] = m_socket;
select( 1, NULL, &tSocketSet, NULL, NULL );
size_t tBytes = send( m_socket, ( char* )data, len, 0 );
if ( tBytes == len )
return true;
printLogLine( sLogTopic, "send() error: %ld\n", __SOCKET_ERROR );
return false;
}
Сокет, с которого делается accept, создается вот так:
int State=1;
int Len = sizeof(State);
setsockopt( m_socket, IPPROTO_TCP, TCP_NODELAY, ( char* )&State, Len );
ulong tSize = 1;
ioctlsocket( m_socket, FIONBIO, &tSize );
Клиентский сокет синхронный.
Хочется плакать...
С уважением, ghazan@postman.ru
Георгий Хазан.
--- А для виндов, что взорвались и падают, есть только миг, ослепительный миг.
* Origin: Zenon N.S.P. news server (2:5020/52.0)