Come posso impostare il timeout di una chiamata socket.connect ()? [duplicare]
Domanda
Questa domanda ha già una risposta qui:
Ho un'app che si collega a un host che potrebbe essere inattivo. Se l'host è inattivo, non voglio attendere i 30 secondi circa necessari per il timeout. Al momento sto utilizzando socket di blocco.
Ho guardato socket.poll () e socket.select () ma preferirei avere solo un'impostazione del tempo sul socket. Non mi importa se è un'impostazione che devo fare da qualche parte nel sistema. Inoltre, mi è sembrato di capire che il sondaggio e selezionare non funzionano con la comunicazione orientata alla connessione - è corretto?
Se questo è assolutamente impossibile, qual è un bel modo per ottenere i risultati che voglio usando il sondaggio, selezionare o un'altra tecnica?
Soluzione
Vedi BeginConnect e Panoramica sulla programmazione asincrona
IAsyncResult asr = socket.BeginConnect( ip, port, null, null );
bool res = asr.AsyncWaitHandle.WaitOne( 10000, true ); // 10 sec timeout
Aggiornamento: c'è un esempio migliore qui .