TPeerCnt _UnLinkCore() { if (_Key == null) { return(TPeerCnt.MaxValue); } if (_Socket != null) { _Socket.Close(); _Socket = null; } _RecvHeader = null; _StreamSndTail = 0; _RecvPacketSeq = 0; _SendPacketSeq = 0; _StreamRcv.Clear(); _StreamSnd.Clear(); _LongIP = 0; _Sending = false; _Connected = false; _ConnectTime = 0; _ConnectTimeOut = 0; _Connecting = false; var PeerNum = _Key.PeerNum; _Key = null; return(PeerNum); }
// 유저 호출 public bool Link(Socket Socket_, SIPPort IPPort_, SKey Key_, TEventHandler RecvEventHandler_, Int32 ConnectTimeOut_) { if (_Socket != null) { return(false); } _RecvEvent = new SocketAsyncEventArgs(); _RecvEvent.Completed += new EventHandler <SocketAsyncEventArgs>(RecvEventHandler_); _SendEvent = new SocketAsyncEventArgs(); _SendEvent.Completed += new EventHandler <SocketAsyncEventArgs>(RecvEventHandler_); _Socket = Socket_; _RecvEvent.UserToken = Key_; _RecvEvent.RemoteEndPoint = IPPort_.EndPoint; _Key = Key_; _LongIP = IPPort_.IP; try { if (!_Socket.ConnectAsync(_RecvEvent)) // _Worker 로 통보받을 필요 없음. { _HBRcvPeriod.NextLoose(); return(_Linked()); } else { _Connecting = true; _ConnectTime = Environment.TickCount; _ConnectTimeOut = ConnectTimeOut_; } } catch { _LinkFailed(); return(false); } return(true); }
public SIPPort(TLongIP IP_, TPort Port_) : base(IP_, Port_) { }