WinSock Recvfrom() nyní vrátí WSAECONNRESET namísto zablokování nebo vypršení časového limitu

Překlady článku Překlady článku
ID článku: 263823 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Program User Datagram Protocol (UDP) v systému Windows 2000 nemusí fungovat a může generovat odpověď WSAECONNRESET.

Příčina

Chcete-li odesílání datagramů, využitím výsledků funkce sendto "Protokolu ICMP port nedosažitelný" odpověď a Vyberte funkci pro readfds, se program vrátí 1 a nastavte následné volání funkce recvfrom nepracuje s WSAECONNRESET (10054) Chyba odpověď. Microsoft Windows NT 4.0 tato situace způsobí, že funkce Vyberte blok nebo časový limit.

Řešení

Tento problém vyřešíte pomocí nejnovější aktualizace service pack pro systém Windows 2000. Další informace získáte následujícím článku znalostní báze Microsoft:
260910Jak získat nejnovější aktualizaci service pack pro systém Windows 2000
V systému Windows 2000 byl zaveden soketů IOCTL se nazývá "SIO_UDP_CONNRESET". Při použití této IOCTL program musí být přepsána speciálně pro systém Windows 2000 získat původní systém Windows NT 4.0 chování. Systém Windows NT 4.0, Microsoft Windows 95 a Microsoft Windows 98 je žádná podpora této nové IOCTL. Kromě přepisování aplikace, je bude nutné si opravu hotfix uvedenou dále v tomto článku dolů.

Následující úryvek kód demonstruje technika, která lze použít k volání WSAIoctl s kódem SIO_UDP_CONNRESET ovládacího prvku získat původní chování systému 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);
}
}
				
to bylo možné tento kód kompilovat, potřebujete mít nejnovější mswsock.h, který obsahuje definice SIO_UDP_CONNRESET nebo Vložit pod definici jej přímo do kódu.
// 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)
				
Poznámka opravu hotfix popsanou v tomto článku bude problém nevyřešíte Pokud program je přepsána IOCTL nové SIO_UDP_CONNRESET použití.

Za účelem zkompilovat tento kód, je nutné mít v počítači nainstalována nejnovější sady Platform SDK. To je k dispozici následujícím webu MSDN:
http://msdn.microsoft.com

Prohlášení

Společnost Microsoft potvrzuje, že se jedná o problém v produktech této společnosti, které jsou uvedeny na začátku tohoto článku. Tento problém byl poprvé opraven v systému Windows 2000 Service Pack 2.

Další informace

Další informace o instalaci systému Windows 2000 a oprav hotfix pro systém Windows 2000 ve stejné době získáte následujícím článku báze Microsoft Knowledge Base:
249149Instalace oprav hotfix pro systém Microsoft Windows 2000 a Windows 2000

Vlastnosti

ID článku: 263823 - Poslední aktualizace: 21. února 2007 - Revize: 4.3
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
Klíčová slova: 
kbmt kbhotfixserver kbqfe kbbug kbfix kbwin2000presp2fix KB263823 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:263823

Dejte nám zpětnou vazbu

 

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