コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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());
            }
        }