WinSock Recvfrom() renvoie désormais WSAECONNRESET au lieu de blocage ou hors délai

Traductions disponibles Traductions disponibles
Numéro d'article: 263823 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Symptômes

Dans Windows 2000, un programme UDP (User Datagram Protocol) peut ne pas fonctionne et générer une réponse WSAECONNRESET.

Cause

Si Envoyer un datagramme à l'aide des résultats de fonction sendto dans une réponse «Port ICMP inaccessible» et la fonction sélectionner est définie pour readfds, le programme retourne 1 et l'appel suivant à la fonction recvfrom ne fonctionne pas avec une réponse d'erreur (10054) WSAECONNRESET. Dans Microsoft Windows NT 4.0, cette situation, la fonction Sélectionnez blocage ou d'un délai d'attente.

Résolution

Pour résoudre ce problème, procurez-vous le dernier service pack pour Windows 2000. Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
260910Comment faire pour obtenir le pack de service Windows 2000 plus récent
Un nouveaux sockets IOCTL appelé «SIO_UDP_CONNRESET» a été introduite dans Windows 2000. Lorsque cet IOCTL est utilisé, le programme doit être réécrit spécifiquement pour Windows 2000 obtenir le Windows NT 4.0 d'origine comportement. Windows NT 4.0, Microsoft Windows 95 et Microsoft Windows 98 ne prennent pas en charge ce nouveau IOCTL. Outre pour réécrire votre application, vous devez le correctif référencé plus loin dans cet article.

L'extrait de code suivant illustre une technique peut être utilisée pour appeler WSAIoctl avec le code de contrôle SIO_UDP_CONNRESET pour obtenir le comportement de Windows NT 4.0 d'origine.
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);
}
}
				
pour pouvoir compiler ce code, vous avez besoin pour que la dernière Mswsock.h qui inclut la définition de SIO_UDP_CONNRESET ou à insérer en dessous définition directement dans votre code.
// 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)
				
note le correctif décrit dans cet article ne résout pas le problème, sauf si le programme est réécrite pour utiliser le nouveau IOCTL SIO_UDP_CONNRESET.

Pour compiler ce code, il est nécessaire pour que la dernière version du SDK de plate-forme installé sur votre ordinateur. Elle est disponible à partir du site MSDN Web à l'adresse suivante :
http://msdn.microsoft.com

Statut

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés au début de cet article. Ce problème a été corrigé dans Windows 2000 Service Pack 2.

Plus d'informations

Pour plus d'informations sur la façon d'installer Windows 2000 et les correctifs Windows 2000 en même temps, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la base de connaissances Microsoft :
249149Installation des correctifs Microsoft Windows 2000 et Windows 2000

Propriétés

Numéro d'article: 263823 - Dernière mise à jour: mercredi 21 février 2007 - Version: 4.3
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Professionnel
Mots-clés : 
kbmt kbhotfixserver kbqfe kbbug kbfix kbwin2000presp2fix KB263823 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 263823
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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