private bool Unbind(SocketWrapper wrapper, SocketError?code = null) { if (code != null) { wrapper.WrapperOnSocketError?.Invoke(code.Value); } if (!WrapperList.Remove(wrapper)) { return(false); } NativeLookup.Remove(wrapper.Socket); wrapper.Local = wrapper.Remote = null; SocketCount--; if (ClientLookup.Remove(wrapper, out Connection connection)) { ClientCount--; wrapper.EndedReadable = true; wrapper.EndedWritable = true; wrapper.ClientOnClose?.Invoke(); } wrapper.State = WrapperState.Destroyed; if (ServerLookup.Remove(wrapper)) { ServerCount--; } return(false); }
private bool Bind(SocketWrapper wrapper) { SocketCount++; WrapperList.Add(wrapper); NativeLookup.Add(wrapper.Socket, wrapper); return(GotFirst = true); }
public void ClientOpen(SocketWrapper referer, Connection connection) => BoundThread.Enqueue(new IOOperation() { Callee = this, Referer = referer, Connection = connection, Type = OperationType.ClientOpen, });
private SocketWrapper Create() { IPEndPoint endPoint = _base?.Local; _base = new SocketWrapper(); _base.WrapperBind(); _base.WrapperAddServer(this); _base.ServerExclusive = Exclusive; _base.ServerBacklog = Backlog; _base.WrapperOnSocketError = _OnError; _base.ServerOnConnection = _OnConnection; if (endPoint != null) { _base.ServerLookup(endPoint); } return(_base); }
private bool Bind(Listener listener, SocketWrapper wrapper) { ServerCount++; ServerLookup.Add(wrapper, listener); return(true); }
private bool Bind(Connection connection, SocketWrapper wrapper) { ClientCount++; ClientLookup.Add(wrapper, connection); return(true); }