private void ContinueAcceptCallback(IAsyncResult ar) { var socket = (Socket)ar.AsyncState; try { if (!socket.Connected) { return; } var read = socket.EndReceive(ar); if (read <= 0) { return; } var currentReadBuffer = new byte[read]; Array.Copy(buffer, 0, currentReadBuffer, 0, read); OnDataArrived(new DataArrivedEventArgs(Tag, socket, (IPEndPoint)socket.RemoteEndPoint, currentReadBuffer)); socket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, ContinueAcceptCallback, socket); } catch { var socketCloser = new SocketCloser(); socketCloser.Close(socket); } }
protected virtual void Dispose(bool disposing) { if (Socket == null) { return; } var socketChecker = new SocketChecker(); if (socketChecker.IsSocketConnected(Socket)) { var socketCloser = new SocketCloser(); socketCloser.Close(Socket); } if (Socket.Connected) { throw new Win32Exception(Marshal.GetLastWin32Error()); } }