c# .net - Annullamento di una chiamata Socket.xxxxAsync




1 Answers

Non sembra essere un modo per interrompere la ricezione asincrona.

Quando il socket è chiuso, impone il completamento della ricezione e la proprietà SocketError del parametro SocketAsyncEventArgs al metodo di callback avrà il valore SocketError.OperationAborted . Quando si verifica questa condizione, è possibile restituire l'oggetto SocketAsyncEventArgs al pool riutilizzabile.

Questo è dimostrato nell'esempio mostrato qui . In particolare, guarda il metodo ProcessReceive (), che chiama il metodo CloseClientSocket () quando e.BytesTransferred == 0 o e.SocketError != SocketError.Success . Il metodo CloseClientSocket () è il punto in cui l'oggetto SocketAsyncEventArgs viene restituito al pool.

client receiveasync

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?




Related

c# .net sockets