private void EndAccept(IAsyncResult result)
{
Socket peerSocket = null;
try
{
var listener = (Socket)result.AsyncState;
peerSocket = listener.EndAccept(result);
var endpoint = (IPEndPoint)peerSocket.RemoteEndPoint;
var uri = new Uri(string.Format("tcp://{0}{1}{2}", endpoint.Address, ':', endpoint.Port));
var peer = new Peer("", uri, EncryptionTypes.All);
var connection = peerSocket.AddressFamily == AddressFamily.InterNetwork
? (IConnection) new IPV4Connection(peerSocket, true)
: new IPV6Connection(peerSocket, true);
RaiseConnectionReceived(peer, connection, null);
}
catch (SocketException)
{
// Just dump the connection
if (peerSocket != null)
peerSocket.Close();
}
catch (ObjectDisposedException)
{
// We've stopped listening
}
finally
{
try
{
if (Status == ListenerStatus.Listening)
_listener.BeginAccept(_endAcceptCallback, _listener);
}
catch (ObjectDisposedException)
{
}
}
}