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)