public void Connect(UVTCPHandle tcp, string ip, Int32 port, Action <UVConnectRquest, Int32, UVException, object> callback, object state) { this.mCallback = callback; this.mState = state; UVException ex; SockAddr addr; UVIntrop.ip4_addr(ip, port, out addr, out ex); if (ex != null) { throw ex; } UVIntrop.tcp_connect(this, tcp, ref addr, UVConnectcb); }
//todo:重载各种write #region Callback private static void UVConnectionCb(IntPtr server, Int32 status) { UVException error; UVIntrop.Check(status, out error); UVTCPHandle handle = UVMemory.FromIntPtr <UVTCPHandle>(server); try { handle.mConnectionCallback(handle, status, error, handle.mConnectionCallbackState); } catch (Exception ex) { throw ex; } }
public static extern int uv_tcp_getpeername(UVTCPHandle handle, out SockAddr name, ref int namelen);
public static extern int uv_tcp_connect(UVConnectRquest connect, UVTCPHandle socket, ref SockAddr addr, uv_connect_cb cb);
public static extern int uv_tcp_nodelay(UVTCPHandle handle, int enable);
public static extern int uv_tcp_open(UVTCPHandle handle, IntPtr hSocket);
public static extern int uv_tcp_bind(UVTCPHandle handle, ref SockAddr addr, int flags);
public static extern int uv_tcp_init(UVLoopHandle loop, UVTCPHandle handle);
public static void tcp_getpeername(UVTCPHandle handle, out SockAddr addr, ref int namelen) { handle.Validate(); ThrowIfErrored(uv_tcp_getpeername(handle, out addr, ref namelen)); }
public static void tcp_nodelay(UVTCPHandle handle, bool enable) { handle.Validate(); ThrowIfErrored(uv_tcp_nodelay(handle, enable ? 1 : 0)); }
public static void tcp_connect(UVConnectRquest handle, UVTCPHandle socket, ref SockAddr addr, uv_connect_cb cb) { handle.Validate(); ThrowIfErrored(uv_tcp_connect(handle, socket, ref addr, cb)); }
public static void tcp_open(UVTCPHandle handle, IntPtr hSocket) { handle.Validate(); ThrowIfErrored(uv_tcp_open(handle, hSocket)); }
public static void tcp_bind(UVTCPHandle handle, ref SockAddr addr, int flags) { handle.Validate(); ThrowIfErrored(uv_tcp_bind(handle, ref addr, flags)); }
public static void tcp_init(UVLoopHandle loop, UVTCPHandle handle) { loop.Validate(); handle.Validate(); ThrowIfErrored(uv_tcp_init(loop, handle)); }
/// <summary> /// 接收 /// </summary> /// <param name="handle"></param> public void Accept(UVTCPHandle handle) { UVIntrop.accept(this, handle); }