private WSAIoctlGeneral2 ( [ socket, [ dwIoControlCode, [ lpvInBuffer, [ cbInBuffer, [ lpvOutBuffer, [ cbOutBuffer, [ lpcbBytesReturned, [ lpOverlapped, [ lpCompletionRoutine ) : int | ||
socket | [ | |
dwIoControlCode | [ | |
lpvInBuffer | [ | |
cbInBuffer | [ | |
lpvOutBuffer | [ | |
cbOutBuffer | [ | |
lpcbBytesReturned | [ | |
lpOverlapped | [ | |
lpCompletionRoutine | [ | |
Résultat | int |
public unsafe RioTcpListener(RioFixedBufferPool sendPool, RioFixedBufferPool revicePool, uint socketCount, uint maxOutstandingReceive = 2048, uint maxOutstandingSend = 2048) : base(sendPool, revicePool, socketCount, ADDRESS_FAMILIES.AF_INET, SOCKET_TYPE.SOCK_STREAM, PROTOCOL.IPPROTO_TCP, maxOutstandingReceive, maxOutstandingSend) { if ((_listenerSocket = WinSock.WSASocket(adressFam, sockType, protocol, IntPtr.Zero, 0, SOCKET_FLAGS.REGISTERED_IO | SOCKET_FLAGS.WSA_FLAG_OVERLAPPED)) == IntPtr.Zero) { WinSock.ThrowLastWSAError(); } int True = 1; uint dwBytes = 0; if (WinSock.WSAIoctlGeneral2(_listenerSocket, WinSock.SIO_LOOPBACK_FAST_PATH, &True, sizeof(int), (void *)0, 0, out dwBytes, IntPtr.Zero, IntPtr.Zero) != 0) { WinSock.ThrowLastWSAError(); } if (WinSock.setsockopt(_listenerSocket, WinSock.IPPROTO_TCP, WinSock.TCP_NODELAY, &True, 4) != 0) { WinSock.ThrowLastWSAError(); } if ((_listenIocp = Kernel32.CreateIoCompletionPort(_listenerSocket, _listenIocp, 0, 1)) == IntPtr.Zero) { Kernel32.ThrowLastError(); } Thread AcceptIocpThread = new Thread(AcceptIocpComplete); AcceptIocpThread.IsBackground = true; AcceptIocpThread.Start(); }
public void SetLoopbackFastPath(bool value) { //Debug.Assert(inUse); int v = value ? 1 : 0; uint dwBytes = 0; if (WinSock.WSAIoctlGeneral2(Socket, WinSock.SIO_LOOPBACK_FAST_PATH, &v, sizeof(int), (void *)0, 0, out dwBytes, IntPtr.Zero, IntPtr.Zero) != 0) { WinSock.ThrowLastWSAError(); } }