S'il vous plaît, quelqu'un m'aidera gentiment comment intercepter l'erreur d'opération de socket de la classe CAsyncSocket.En utilisant CAsynSocket, comment capturer le code de sortie des opérations de socket?
Si je fais ceci:
int iLen = recv(socket, socketBuffer, sizeBuffer, 0);
if(iLen==SOCKET_ERROR) {
//handle error here
} else {
//do something with the received data
}
Il renvoie toujours l'erreur, ce qui est WSAEWOULDBLOCK
, et la même chose pour une autre opération comme send(), connect(), etc ...
Selon MSDN Ce n'est pas une erreur fatale, et il faut du temps pour que les actions soient terminées. Donc comment puis-je vérifier chaque fois que mon programme a recv() ou send() correctement?
Le dernier argument de [ 'recv'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms740121 (v = vs.85) .aspx) est une valeur d'indicateur * integer *, pas un pointeur. Donc, vous ne devriez pas utiliser 'NULL' ici. –
En ce qui concerne votre problème, 'WSAEWOULDBLOCK' vous indique simplement qu'il n'y a rien à recevoir pour le socket * non-bloquant *. Vous pouvez utiliser ['select'] (https://msdn.microsoft.com/fr-fr/library/windows/desktop/ms740141 (v = vs.85) .aspx) ou [' WSAPoll'] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms741669(v=vs.85).aspx) pour interroger si le socket (s) a quelque chose à lire. –
Merci pour votre commentaire, dans MFC, ils définissent NULL comme 0; cependant, j'ai édité mon code comme suggestion. Pour le select(), je n'ai toujours aucune idée de comment l'utiliser. –