private bool HandleNewConnection(SocketAsyncEventArgs e) { if (e.SocketError != SocketError.Success) { e.Dispose(); return(false); } // Ok to create new event args on accept because we assume a connection to be long-running var receiveEventArgs = new SocketAsyncEventArgs(); var buffer = new byte[networkBufferSize]; receiveEventArgs.SetBuffer(buffer, 0, networkBufferSize); var args = new ConnectionArgs { socket = e.AcceptSocket }; receiveEventArgs.UserToken = args; receiveEventArgs.Completed += RecvEventArg_Completed; e.AcceptSocket.NoDelay = true; // If the client already have packets, avoid handling it here on the handler so we don't block future accepts. if (!e.AcceptSocket.ReceiveAsync(receiveEventArgs)) { Task.Run(() => RecvEventArg_Completed(null, receiveEventArgs)); } return(true); }
private bool HandleNewConnection(SocketAsyncEventArgs e) { if (e.SocketError != SocketError.Success) { e.Dispose(); return(false); } // Ok to create new event args on accept because we assume a connection to be long-running var receiveEventArgs = new SocketAsyncEventArgs(); var bufferSize = BufferSizeUtils.ClientBufferSize(maxSizeSettings); var buffer = new byte[bufferSize]; receiveEventArgs.SetBuffer(buffer, 0, bufferSize); var(store, functionsGen, serializer) = ((FasterKV <Key, Value>, Func <WireFormat, Functions>, ParameterSerializer))e.UserToken; var args = new ConnectionArgs <Key, Value, Input, Output, Functions, ParameterSerializer> { socket = e.AcceptSocket, store = store, functionsGen = functionsGen, serializer = serializer, maxSizeSettings = maxSizeSettings }; receiveEventArgs.UserToken = args; receiveEventArgs.Completed += RecvEventArg_Completed; e.AcceptSocket.NoDelay = true; // If the client already have packets, avoid handling it here on the handler so we don't block future accepts. if (!e.AcceptSocket.ReceiveAsync(receiveEventArgs)) { Task.Run(() => RecvEventArg_Completed(null, receiveEventArgs)); } return(true); }
private unsafe bool HandleNewConnection(SocketAsyncEventArgs e) { if (e.SocketError != SocketError.Success) { e.Dispose(); return(false); } // Ok to create new event args on accept because we assume a connection to be long-running var receiveEventArgs = new SocketAsyncEventArgs(); var args = new ConnectionArgs { socket = e.AcceptSocket }; #if NET5_0_OR_GREATER var buffer = GC.AllocateArray <byte>(NetworkBufferSize, true); #else var buffer = new byte[NetworkBufferSize]; args.recvHandle = GCHandle.Alloc(buffer, GCHandleType.Pinned); #endif args.recvBufferPtr = (byte *)Unsafe.AsPointer(ref buffer[0]); receiveEventArgs.SetBuffer(buffer, 0, NetworkBufferSize); receiveEventArgs.UserToken = args; receiveEventArgs.Completed += RecvEventArg_Completed; e.AcceptSocket.NoDelay = true; // If the client already have packets, avoid handling it here on the handler so we don't block future accepts. if (!e.AcceptSocket.ReceiveAsync(receiveEventArgs)) { Task.Run(() => RecvEventArg_Completed(null, receiveEventArgs)); } return(true); }