Gestion des délais d'attente de connexion Socket dans .NET Framework
Les applications réseau doivent souvent contrôler le temps passé à attendre une connexion à un serveur distant. Le délai d'expiration de connexion au socket .NET Framework par défaut peut être assez long (souvent dépassant 15 secondes), entraînant des retards lors de la connexion à des hôtes qui ne répondent pas. Cet article montre comment ajuster ce délai d'attente pour une efficacité améliorée.
Considérez l'extrait de code suivant :
<code class="language-csharp">m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // ... m_clientSocket.Connect(ipEnd);</code>
Le comportement par défaut de la méthode Connect
est de bloquer pendant 15 secondes maximum. Pour implémenter un délai d'attente plus court, nous pouvons exploiter la classe AsyncWaitHandle
:
<code class="language-csharp">Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Set a 5-second connection timeout IAsyncResult result = socket.BeginConnect(sIP, iPort, null, null); bool success = result.AsyncWaitHandle.WaitOne(5000, true); // Wait for 5000 milliseconds (5 seconds) if (socket.Connected) { socket.EndConnect(result); } else { // Handle connection failure socket.Close(); throw new ApplicationException("Connection to server failed."); }</code>
Ce code révisé lance une tentative de connexion asynchrone. La méthode WaitOne
attend 5 secondes maximum. Une connexion réussie dans ce délai est complétée par EndConnect
. Si la connexion échoue, le socket est fermé et une exception est levée, évitant ainsi les attentes prolongées des serveurs qui ne répondent pas. Cette approche fournit une méthode robuste et efficace pour gérer les délais d'attente de connexion aux sockets dans vos applications .NET Framework.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!