static void OnCallback(IntPtr s, int type, IntPtr address, IntPtr data, IntPtr info) { var socket = GCHandle.FromIntPtr(info).Target as CFSocket; CFSocketCallBackType cbType = (CFSocketCallBackType)type; if (cbType == CFSocketCallBackType.AcceptCallBack) { var ep = CFSocketAddress.EndPointFromAddressPtr(address); var handle = new CFSocketNativeHandle(Marshal.ReadInt32(data)); socket.OnAccepted(new CFSocketAcceptEventArgs(handle, ep)); } else if (cbType == CFSocketCallBackType.ConnectCallBack) { CFSocketError result; if (data == IntPtr.Zero) { result = CFSocketError.Success; } else { result = (CFSocketError)Marshal.ReadInt32(data); } socket.OnConnect(new CFSocketConnectEventArgs(result)); } }
static void OnCallback(IntPtr s, nuint type, IntPtr address, IntPtr data, IntPtr info) { var socket = GCHandle.FromIntPtr(info).Target as CFSocket; if (socket is null) { return; } CFSocketCallBackType cbType = (CFSocketCallBackType)(ulong)type; if (cbType == CFSocketCallBackType.AcceptCallBack) { var ep = CFSocketAddress.EndPointFromAddressPtr(address); var handle = new CFSocketNativeHandle(Marshal.ReadInt32(data)); socket.OnAccepted(new CFSocketAcceptEventArgs(handle, ep)); } else if (cbType == CFSocketCallBackType.ConnectCallBack) { CFSocketError result; if (data == IntPtr.Zero) { result = CFSocketError.Success; } else { // Note that we read a 32bit value even if CFSocketError is a nint: // 'or a pointer to an SInt32 error code if the connect failed.' result = (CFSocketError)Marshal.ReadInt32(data); } socket.OnConnect(new CFSocketConnectEventArgs(result)); } else if (cbType == CFSocketCallBackType.DataCallBack) { var ep = CFSocketAddress.EndPointFromAddressPtr(address); using (var cfdata = new CFData(data, false)) socket.OnData(new CFSocketDataEventArgs(ep, cfdata.GetBuffer())); } else if (cbType == CFSocketCallBackType.NoCallBack) { // nothing to do } else if (cbType == CFSocketCallBackType.ReadCallBack) { socket.OnRead(new CFSocketReadEventArgs()); } else if (cbType == CFSocketCallBackType.WriteCallBack) { socket.OnWrite(new CFSocketWriteEventArgs()); } }
public void EnableCallBacks(CFSocketCallBackType types) { CFSocketEnableCallBacks(Handle, types); }
extern static void CFSocketEnableCallBacks(IntPtr handle, CFSocketCallBackType types);
extern static IntPtr CFSocketCreateConnectedToSocketSignature(IntPtr allocator, ref CFSocketSignature signature, CFSocketCallBackType callBackTypes, CFSocketCallBack callout, IntPtr context, double timeout);
extern static IntPtr CFSocketCreateWithNative(IntPtr allocator, CFSocketNativeHandle sock, CFSocketCallBackType callBackTypes, CFSocketCallBack callout, IntPtr ctx);
extern static IntPtr CFSocketCreate(IntPtr allocator, int family, int type, int proto, CFSocketCallBackType callBackTypes, CFSocketCallBack callout, IntPtr ctx);
public void DisableCallBacks(CFSocketCallBackType types) { CFSocketDisableCallBacks(handle, (nuint)(ulong)types); }
extern static void CFSocketEnableCallBacks (IntPtr handle, CFSocketCallBackType types);
extern static IntPtr CFSocketCreateConnectedToSocketSignature (IntPtr allocator, ref CFSocketSignature signature, CFSocketCallBackType callBackTypes, CFSocketCallBack callout, IntPtr context, double timeout);
extern static IntPtr CFSocketCreateWithNative (IntPtr allocator, CFSocketNativeHandle sock, CFSocketCallBackType callBackTypes, CFSocketCallBack callout, IntPtr ctx);
extern static IntPtr CFSocketCreate (IntPtr allocator, int family, int type, int proto, CFSocketCallBackType callBackTypes, CFSocketCallBack callout, IntPtr ctx);
public void DisableCallBacks(CFSocketCallBackType types) { CFSocketDisableCallBacks(handle, types); }
public void DisableCallBacks (CFSocketCallBackType types) { CFSocketDisableCallBacks (Handle, types); }
static extern void CFSocketDisableCallBacks(IntPtr handle, CFSocketCallBackType types);
public void EnableCallBacks (CFSocketCallBackType types) { CFSocketEnableCallBacks (handle, types); }
public void EnableCallBacks(CFSocketCallBackType types) { CFSocketEnableCallBacks(Handle, (nuint)(ulong)types); }
public void EnableCallBacks(CFSocketCallBackType types) { CFSocketEnableCallBacks (handle, (nuint) (ulong) types); }