From 9ef92d74de6ce34e8ee05274c23894d1a60adcd9 Mon Sep 17 00:00:00 2001 From: mark Date: Sun, 19 Dec 2010 00:03:46 +0000 Subject: [PATCH] --- Server/Network/Listener.cs | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/Server/Network/Listener.cs b/Server/Network/Listener.cs index e2c3ec4e3..cf4d18ad2 100644 --- a/Server/Network/Listener.cs +++ b/Server/Network/Listener.cs @@ -64,9 +64,9 @@ namespace Server.Network DisplayListener(); #if Framework_4_0 - SocketAsyncEventArgs m_EventArgs = new SocketAsyncEventArgs(); + m_EventArgs = new SocketAsyncEventArgs(); m_EventArgs.Completed += new EventHandler( Accept_Completion ); - ThreadPool.QueueUserWorkItem( new WaitCallback( Accept_Start ); + ThreadPool.QueueUserWorkItem( delegate { Accept_Start(); } ); #else m_OnAccept = new AsyncCallback( OnAccept ); IAsyncResult res = m_Listener.BeginAccept( m_OnAccept, m_Listener ); @@ -110,7 +110,7 @@ namespace Server.Network private void DisplayListener() { - IPEndPoint ipep = m_Listener.EndPoint as IPEndPoint; + IPEndPoint ipep = m_Listener.LocalEndPoint as IPEndPoint; if ( ipep == null ) return; @@ -143,9 +143,21 @@ namespace Server.Network #if Framework_4_0 private void Accept_Start() { - while ( !m_Listener.AcceptAsync( m_EventArgs ) ) { - Accept_Process( m_EventArgs ); - } + bool result; + + do { + try { + result = !m_Listener.AcceptAsync( m_EventArgs ); + } catch ( SocketException ex ) { + NetState.TraceException( ex ); + break; + } catch ( ObjectDisposedException ) { + break; + } + + if ( result ) + Accept_Process( m_EventArgs ); + } while ( result ); } private void Accept_Completion( object sender, SocketAsyncEventArgs e ) @@ -165,6 +177,7 @@ namespace Server.Network e.AcceptSocket = null; } + #else private void OnAccept( IAsyncResult asyncResult ) {