public override AwaitIo CloseAsync(bool panic = false)
 {
     var socket = _socket;
     if (socket == null)
         return AwaitIo.Done;
     _socket = null;
     return socket.CloseAsync(panic);
 }
 public override AwaitIo AcceptAsync()
 {
     if (_socket != null) 
         throw new InvalidOperationException();
     KeepAlive = true;
     _socket = new SaeSocket(_awaitable, Data);
     return _socket.AcceptAsync(_listener.Socket, _listener.PostAcceptBuffers);
 }
 public override AwaitIo ConnectAsync()
 {
     if (_socket != null && _socket.Status == SaeSocket.State.Connected) 
         return AwaitIo.Done;
     _socket = new SaeSocket(_awaitable, Data);
     if (Remote == null)
         Remote = SaeSocket.GetRemoteEp(EndPoint.DnsSafeHost, EndPoint.Port);
     return _socket.ConnectAsync(Remote, Timeout);
 }