Есть ли какая-то причина, по которой блокирующий вызов функции winsock send () в Vista должен вернуться немедленно? - PullRequest
1 голос
/ 25 марта 2010

Есть ли какая-либо причина, по которой блокирующий вызов функции winsock send () в Vista должен вернуться немедленно? Работает с ожидаемой задержкой на XP и ниже. Мне интересно, имеет ли это какое-либо отношение к функции автонастройки Vista. Код:

   char *pBuffer; // pointer to data
   int bytes;  // total size
   int i = 0, j=0;
   while (i < bytes)
   {
    j = send(m_sock, pBuffer+i, bytes-i, 0);
        i+=j;
   }

Спасибо,
Паван

Ответы [ 2 ]

3 голосов
/ 25 марта 2010

Первая возможность заключается в том, что send () не удалось и вернул SOCKET_ERROR. Ваш код не может обнаружить это, вы действительно должны это исправить.

Следующая возможность заключается в том, что send () просто не блокируется. Что вполне нормально, оно блокируется только тогда, когда в транспортной подсистеме не осталось буферного пространства. Вам придется прокачать несколько мегабайт, прежде чем это произойдет.

1 голос
/ 25 марта 2010

вероятно выходной буфер заполнен. проверьте код возврата от send ()

...