Esempio n. 1
0
        private void Disconnect(bool forceCallback)
        {
            _lastSocketError = SocketResultCode.OK;

            bool wasConnected;

            lock (this)
            {
                if (null == _socket)
                {
                    return;
                }

                wasConnected = _socket.Connected;

                try
                {
                    _socket.Shutdown(SocketShutdown.Both);
                }
                catch (ObjectDisposedException)
                {
                    // EMPTY
                }
                catch (SocketException e)
                {
                    _lastSocketError = SocketTools.NativeToSocketError(e.NativeErrorCode);
                }

                _socket.Close();
                _socket = null;
                System.Threading.Thread.Yield();
            }

            if (wasConnected || forceCallback)
            {
                OnDisconnected();
            }
        }
Esempio n. 2
0
        private void OnConnectCallback(IAsyncResult ar)
        {
            var sock = (Socket)ar.AsyncState;

            try
            {
                sock.EndConnect(ar);
            }
            catch (ObjectDisposedException)
            {
                OnConnectFailed(SocketResultCode.SocketNotAvailableAnymore);
                return;
            }
            catch (SocketException e)
            {
                OnConnectFailed(SocketTools.NativeToSocketError(e.NativeErrorCode));
                return;
            }

            if (!sock.Connected)
            {
                OnConnectFailed(SocketResultCode.CantConnect);
                return;
            }

            OnConnected();

            var res = StartReceive();

            if (res == SocketResultCode.OK)
            {
                return;
            }

            OnSocketError(res, _lastSocketError);
            Disconnect();
        }
Esempio n. 3
0
 private SocketResultCode StartAccept(Socket socket)
 {
     try
     {
         socket.BeginAccept(OnAcceptCallback, socket);
     }
     catch (ObjectDisposedException)
     {
         return(SocketResultCode.SocketNotAvailableAnymore);
     }
     catch (SocketException e)
     {
         return(SocketTools.NativeToSocketError(e.NativeErrorCode));
     }
     catch (InvalidOperationException)
     {
         return(SocketResultCode.CantStartListener);
     }
     catch (NotSupportedException)
     {
         return(SocketResultCode.NotSupportedOnOS);
     }
     return(SocketResultCode.OK);
 }