/// <summary> /// Called when a ReceiveAsyncFrom operation completes /// </summary> private void ProcessReceive(SocketAsyncEventArgs e) { try { if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success) { packetsReceived++; bytesReceived += e.BytesTransferred; var request = e.UserToken as DnsRequestListenerSession; // Handle this request var responseBytes = DnsRequestProcessor.ProcessReceivedData(request); if (responseBytes > 0) { request.SocketAsyncEventArgs.SetBuffer(0, responseBytes); request.Socket.SendAsync(e); return; } } } catch (Exception ex) { // In case of an exception, close the socket } // Start listening again this.CloseClientSocket(e); }
/// <summary> /// Called when a ReceiveAsyncFrom operation completes /// </summary> private void ProcessReceiveFrom(SocketAsyncEventArgs e) { try { if (e.BytesTransferred > 0 && e.SocketError == SocketError.Success) { packetsReceived++; bytesReceived += e.BytesTransferred; var request = e.UserToken as DnsRequestListenerSession; // Handle this request var responseBytes = DnsRequestProcessor.ProcessReceivedData(request); if (responseBytes > 0) { request.SocketAsyncEventArgs.SetBuffer(0, responseBytes); this.listenerSocket.SendToAsync(e); } } else { // Start listening again e.SetBuffer(0, e.Buffer.Length); this.listenerSocket.ReceiveFromAsync(e); } } catch { // In case of an exception, start listening again e.SetBuffer(0, e.Buffer.Length); this.listenerSocket.ReceiveFromAsync(e); } }