Re[11]: Задержка при коннекте с XP на Vista
От: Модуль Оверлеев  
Дата: 16.04.08 12:21
Оценка:
Здравствуйте, TarasCo, Вы писали:

TC>Обычно пакет с window = ZeroWindow и флагом ACK действительно посылается при переполнении входного буфера для приостановки передачи. Но. Судя по значениям Seq и Ack = 1, данный пакет был послан сразу после установки соединения. Есть подозрение, что данное соединение установлено, но еще не принято сетевым приложением ( т.е не было вызова accept ), возможно приложение зависло. Также возможно, действуют какие то ограничения на кол-во устанавливаемых соединений в единицу времени. У вас виста не Home Edition? Третье предположение ( маловероятное ) — на висте работают кривые драйвера, которые расходуют NonPaged pool ( можно посмотреть соответствующее значение в диспетчере задач ).


Vista Enterprise.
невыгружаемая память не расходуется.

на счет повисания приложения сказать трудно. код, который принимает входящие соединения, выглядит так:
while(inst.m_Listening)
        {
            try
            {
                m_Socket->Listen();
                SOCKET incomming = m_Socket->Accept();
                if(incomming == INVALID_SOCKET)
                    continue;

                CSocketPtr sp(new CSocket(incomming));

                CMessageThread * thr = new CMessageThread(sp);
                thr->DeleteWhenFinish(true);
                thr->BeginThread();
            
            }
            catch(...)
            {
            }
        }
        return 0;

thr выполняет getpeername и потом overlapped прием 4 байт (WSARecv) кода операции, хотя шлются они большими пачками.
2 раза мне удалось поймать ее в дебаггере — оба раза приложение висело в аccept.
---
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.