[C#] Annullamento di una chiamata Socket.xxxxAsync



Answers

La causa più probabile è quando riutilizzi SocketAsyncEventArgs che stai chiamando:

SAE.Completed + = new EventHandler (SocketEventArg_Completed);

In questo modo, la richiamata verrà richiamata più volte !!!

Assicurati di impostare solo il gestore completato una volta.

Question

Dopo aver chiamato Socket.Shutdown, Socket.Close e Socket.Disconnect, sembra che Socket.ReceiveAsync non si interrompa. I tentativi di riutilizzare l'oggetto SocketAsycEventArgs utilizzato nella chiamata ReceiveAsync (suggerito nella documentazione come best practice) provocano l'errore:

Un'operazione di socket asincrono è già in corso utilizzando questa istanza SocketAsyncEventArgs

Cosa devo fare per ottenere ReceiveAsync per rilasciare la presa su questa istanza SocketAsyncEventArgs?

Modifica: ho lavorato su questo segnalando una ricezione in sospeso e non facendo alcuna pulizia fino a quando il ricevere non entra (cioè completato viene inviato). Non si sente troppo bene però. Non può essere semplicemente abortito, come l'API WebRequest?




Links