WinSock Recvfrom() теперь возвращает WSAECONNRESET вместо блокировки или превышения времени ожидания

Переводы статьи Переводы статьи
Код статьи: 263823 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

Проблема

В Windows 2000 может программа User Datagram Protocol (UDP) не работать и генерировать ответ WSAECONNRESET.

Причина

При отправке датаграмм с использованием SendTo функция приводит ответ «Порт ICMP недоступен» и Select функция имеет значение readfds, программа возвращает 1 и Следующий вызов Recvfrom функция не работает с ошибкой WSAECONNRESET (10054) ответ. В Microsoft Windows NT 4.0, в результате Select функция блокировки или истечения времени ожидания.

Решение

Чтобы устранить эту проблему, получите последний пакет обновления для Windows 2000. Для получения дополнительных сведений щелкните следующий номер статьи базы знаний Майкрософт:
260910 Как получить последний пакет обновления для Windows 2000
Новых сокетов имеет IOCTL, называется «sio_udp_connreset» была введена в Windows 2000. Когда используется этот запрос IOCTL, программа должна быть переписать специально для Windows 2000 для получения исходного Windows NT 4.0 поведение. У Microsoft Windows 98, Windows NT 4.0 и Microsoft Windows 95 отсутствует поддержка данной новой IOCTL. В дополнение к перезаписи приложения, которые требуется исправление, ниже в этой статье.

В Следующий фрагмент кода демонстрирует способ, который может использоваться для вызова Функция WSAIoctl с кодом элемента управления SIO_UDP_CONNRESET для получения исходного Windows Поведение NT 4.0.
DWORDdwBytesReturned = 0;
BOOLbNewBehavior = FALSE;
DWORDstatus;

// disable  new behavior using
// IOCTL: SIO_UDP_CONNRESET
status = WSAIoctl(sd, SIO_UDP_CONNRESET,
&bNewBehavior, sizeof(bNewBehavior),
                   NULL, 0, &dwBytesReturned,
                   NULL, NULL);

if (SOCKET_ERROR == status)
{
DWORD dwErr = WSAGetLastError();
if (WSAEWOULDBLOCK == dwErr)
{
// nothing to do
return(FALSE);
}
else
{
printf("WSAIoctl(SIO_UDP_CONNRESET) Error: %d\n", dwErr);
return(FALSE);
}
}
				
Для компиляции этого кода необходимо либо иметь последние версии Mswsock.h, который включает в себя определение SIO_UDP_CONNRESET или одну из следующих ссылок Определение его непосредственно в код.
// MS Transport Provider IOCTL to control
// reporting PORT_UNREACHABLE messages
// on UDP sockets via recv/WSARecv/etc.
// Path TRUE in input buffer to enable (default if supported),
// FALSE to disable.
#defineSIO_UDP_CONNRESET_WSAIOW(IOC_VENDOR,12)
				
Примечание Исправление, описанное в данной статье не решит неполадки пока программа переписаны для использования нового SIO_UDP_CONNRESET IOCTL.

Для компиляции этого кода необходимо, чтобы последние Platform SDK, установленных на компьютере. Эта возможность доступна из веб-узле MSDN:

Статус

Корпорация Майкрософт подтверждает, что это проблема в продуктах Майкрософт, перечисленных в начале этой статьи. Впервые эта ошибка была исправлена в Windows 2000 службы Пакет обновления 2.

Дополнительная информация

Для получения дополнительных сведений об установке Windows 2000 и Windows в то же время исправлений щелкните следующий номер статьи базы знаний Майкрософт:
249149Установка исправления для Microsoft Windows 2000 и Windows 2000

Свойства

Код статьи: 263823 - Последний отзыв: 5 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • операционная система Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
Ключевые слова: 
kbhotfixserver kbqfe kbbug kbfix kbwin2000presp2fix kbmt KB263823 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:263823

Отправить отзыв

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com