From: Gonzalo Paniagua Javier Date: Mon, 25 Oct 2010 22:24:56 +0000 (-0400) Subject: Use SocketAsyncEventArgs X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=224001610d0fc25eee5fe3ed70b62edb0a403933;p=mono.git Use SocketAsyncEventArgs BeginAccept/EndAccept replaced by AcceptAsync. --- diff --git a/mcs/class/System/System.Net/EndPointListener.cs b/mcs/class/System/System.Net/EndPointListener.cs index a3e5b4a5736..b78d0cd7cdd 100644 --- a/mcs/class/System/System.Net/EndPointListener.cs +++ b/mcs/class/System/System.Net/EndPointListener.cs @@ -58,7 +58,10 @@ namespace System.Net { sock = new Socket (addr.AddressFamily, SocketType.Stream, ProtocolType.Tcp); sock.Bind (endpoint); sock.Listen (500); - sock.BeginAccept (OnAccept, this); + SocketAsyncEventArgs args = new SocketAsyncEventArgs (); + args.UserToken = this; + args.Completed += OnAccept; + sock.AcceptAsync (args); prefixes = new Hashtable (); } @@ -78,28 +81,27 @@ namespace System.Net { } } - static void OnAccept (IAsyncResult ares) + static void OnAccept (object sender, EventArgs e) { - EndPointListener epl = (EndPointListener) ares.AsyncState; + SocketAsyncEventArgs args = (SocketAsyncEventArgs) e; + EndPointListener epl = (EndPointListener) args.UserToken; Socket accepted = null; + if (args.SocketError == SocketError.Success) { + accepted = args.AcceptSocket; + args.AcceptSocket = null; + } + try { if (epl.sock != null) - accepted = epl.sock.EndAccept (ares); + epl.sock.AcceptAsync (args); } catch { - // Anything to do here? - } finally { - try { - if (epl.sock != null) - epl.sock.BeginAccept (OnAccept, epl); - } catch { - if (accepted != null) { - try { - accepted.Close (); - } catch {} - accepted = null; - } - } - } + if (accepted != null) { + try { + accepted.Close (); + } catch {} + accepted = null; + } + } if (accepted == null) return;