WinSock-recvfrom() gibt jetzt WSAECONNRESET anstelle von blockieren oder Timeout zurück.

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 263823 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Problembeschreibung

In Windows 2000 wird ein Programm (UDP) funktioniert möglicherweise nicht und eine Antwort WSAECONNRESET generieren.

Ursache

Wenn sendet ein Datagramm über die Sendto -Funktion Ergebnisse in eine "ICMP-Port nicht erreichbar"-Antwort und die Funktion Wählen Sie für Readfds festgelegt ist, das Programm gibt 1 zurück, und der nachfolgende Aufruf der Recvfrom -Funktion funktioniert nicht mit einer Antwort WSAECONNRESET (10054) Fehler. In Microsoft Windows NT 4.0 bewirkt, dass dies die Funktion Wählen Sie blockieren oder das Timeout.

Lösung

Installieren Sie das neueste Service Pack für Windows 2000, um dieses Problem zu beheben. Weitere Informationen finden Sie im folgenden Artikel der Microsoft Knowledge Base:
260910Wie Sie das neueste Service Pack für Windows 2000 erhalten
Eine neue Sockets IOCTL aufgerufen "SIO_UDP_CONNRESET" wurde in Windows 2000 eingeführt. Wenn diese IOCTL verwendet wird, muss das Programm speziell für Windows 2000 zu der ursprünglichen Windows NT 4.0 umgeschrieben werden Verhalten. Windows NT 4.0, Microsoft Windows 95 und Microsoft Windows 98 bieten keine Unterstützung für diese neuen IOCTL. Zusätzlich zum erneuten Schreiben von Ihrer Anwendung, Sie müssen den Hotfix auf die verwiesen wird weiter unten in diesem Artikel.

Der folgende Codeausschnitt veranschaulicht ein Verfahren, die mit der SIO_UDP_CONNRESET Steuercode, den ursprüngliche Windows NT 4.0-Verhalten zu WSAIoctl Aufrufen verwendet werden können.
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);
}
}
				
für diesen Code zu kompilieren, Sie müssen, den neuesten Mswsock.h enthält die Definition des SIO_UDP_CONNRESET oder Definition der direkt in Ihren Code einfügen.
// 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)
				
Hinweis die in diesem Artikel beschriebenen Hotfix wird das Problem nicht behoben, sofern das Programm mit der neuen SIO_UDP_CONNRESET IOCTL umgeschrieben wird.

Um diesen Code zu kompilieren, ist es erforderlich, neueste Plattform-SDK auf Ihrem Computer installiert haben. Dies steht auf der folgenden MSDN-Website:
http://msdn.microsoft.com

Status

Microsoft hat bestätigt, dass es sich hierbei um ein Problem bei den in diesem Artikel genannten Microsoft-Produkten handelt. Dieses Problem wurde erstmals in Windows 2000 Service Pack 2.

Weitere Informationen

Weitere Informationen zum Windows 2000 und Windows 2000-Hotfixes gleichzeitig installieren finden Sie im folgenden Artikel der Microsoft Knowledge Base:
249149Installation von Microsoft Windows 2000 und Windows 2000-Hotfixes

Eigenschaften

Artikel-ID: 263823 - Geändert am: Mittwoch, 21. Februar 2007 - Version: 4.3
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professional Edition
Keywords: 
kbmt kbhotfixserver kbqfe kbbug kbfix kbwin2000presp2fix KB263823 KbMtde
Maschinell übersetzter Artikel
Wichtig: Dieser Artikel wurde maschinell und nicht von einem Menschen übersetzt. Die Microsoft Knowledge Base ist sehr umfangreich und ihre Inhalte werden ständig ergänzt beziehungsweise überarbeitet. Um Ihnen dennoch alle Inhalte auf Deutsch anbieten zu können, werden viele Artikel nicht von Menschen, sondern von Übersetzungsprogrammen übersetzt, die kontinuierlich optimiert werden. Doch noch sind maschinell übersetzte Texte in der Regel nicht perfekt, insbesondere hinsichtlich Grammatik und des Einsatzes von Fremdwörtern sowie Fachbegriffen. Microsoft übernimmt keine Gewähr für die sprachliche Qualität oder die technische Richtigkeit der Übersetzungen und ist nicht für Probleme haftbar, die direkt oder indirekt durch Übersetzungsfehler oder die Verwendung der übersetzten Inhalte durch Kunden entstehen könnten.
Den englischen Originalartikel können Sie über folgenden Link abrufen: 263823
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

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