IAsyncResult IDnsClient.BeginProcess(Request request, AsyncCallback callback, object state) { Internal.AsyncResult<Response> result = new Internal.AsyncResult<Response>(callback, state); // send request Datagram qdata = request.Data; if (qdata.Length > DatagramMaxLength) // can actually never happen throw new InvalidOperationException(String.Format( "Request message length exceeds {0} bytes.", DatagramMaxLength)); // LogMessage LogRequest(qdata.Length); request.SetTimestamp(); base.BeginSend(qdata, qdata.Length, RemoteEP, new AsyncCallback(AsyncRequestSent), result); return result; }
IAsyncResult IDnsClient.BeginProcess(Request request, AsyncCallback callback, object state) { if (object.ReferenceEquals(null, request)) throw new ArgumentNullException("request"); Internal.AsyncResult<Response> result = new Internal.AsyncResult<Response>(callback, state); // create request datagram, prefixed with the two byte length field Datagram qdata = Datagram.GetPrefixed(request.Data); NetworkStream ns = base.GetStream(); if (RequestSending != null) RequestSending(this, new MessageEventArgs(request, ns, (IPEndPoint)Client.RemoteEndPoint)); // LogMessage LogRequest(qdata.Length); // asynchronously send prefixed request message request.SetTimestamp(); ns.BeginWrite(qdata, 0, qdata.Length, new AsyncCallback(AsyncRequestWritten), result); return result; }