Je suis en train d'écrire un simple socket client qui n'utilise qu'une seule socket. Donc j'ai pensé que je pourrais réutiliser un seul SocketAsyncEventArgs pour toutes les opérations de réception. Cela fonctionne bien tant que le socket est connecté. Lorsque le serveur se déconnecte, le client entrera dans une boucle de réception infinie spamming "Réussite" dans la console.Réutilisation de SocketAsyncEventArgs avec ReceiveAsync en boucle infinie
Ne devrait pas e.SocketError! = SocketError.Success être vrai lorsque le socket est déconnecté?
Voici une partie du code:
private void Completed(object sender, SocketAsyncEventArgs e)
{
if (e.SocketError != SocketError.Success)
status = 0;
System.Console.WriteLine(e.LastOperation + " " + e.SocketError);
if (status == 1)
{
switch (e.LastOperation)
{
case SocketAsyncOperation.Connect:
ProcessConnect(e);
break;
case SocketAsyncOperation.Receive:
ProcessReceive(e);
break;
case SocketAsyncOperation.Send:
ProcessSend(e);
break;
default:
status = 0;
break;
}
}
if (status != 1)
CloseSocket();
}
private void ProcessReceive(SocketAsyncEventArgs e)
{
if (!socket.ReceiveAsync(e))
Completed(null, e);
}
Merci. C'était une simple salve et cela a résolu le problème :) – remdao
Peut-être que vous pourriez «cocher» ma réponse comme correcte alors? :) –