private void ProcessAccept(SocketAsyncEventArgs e) { try { SocketAsyncEventArgs readEventArgs = _socketAsyncReceiveEventArgsPool.Pop(); if (readEventArgs != null) { readEventArgs.UserToken = new AsyncUserToken(e.AcceptSocket); Interlocked.Increment(ref _connectedSocketCount); Console.WriteLine("Client connection accepted. There are {0} clients connected to the server", _connectedSocketCount); if (!e.AcceptSocket.ReceiveAsync(readEventArgs)) { ProcessReceive(readEventArgs); } } else { Console.WriteLine("There are no more available sockets to allocate."); } } catch (SocketException ex) { AsyncUserToken token = e.UserToken as AsyncUserToken; Console.WriteLine("Error when processing data received from {0}:\r\n{1}", token.Socket.RemoteEndPoint, ex.ToString()); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } // Accept the next connection request. StartAccept(e); }
//____________________________________________________________________________ private void DisposeAllSaeaObjects() { SocketAsyncEventArgs eventArgs; while (this.poolOfAcceptEventArgs.Count > 0) { eventArgs = poolOfAcceptEventArgs.Pop(); eventArgs.Dispose(); } while (this.poolOfRecSendEventArgs.Count > 0) { eventArgs = poolOfRecSendEventArgs.Pop(); eventArgs.Dispose(); } }
private void SendMessage(MessageData messageData, byte[] message) { var sendEventArgs = _socketAsyncSendEventArgsPool.Pop(); if (sendEventArgs != null) { sendEventArgs.SetBuffer(message, 0, message.Length); sendEventArgs.UserToken = messageData.Token; messageData.Token.Socket.SendAsync(sendEventArgs); } else { waitSendEvent.WaitOne(); SendMessage(messageData, message); } }
private void ProcessAccept(SocketAsyncEventArgs e) { Interlocked.Increment(ref m_numConnectedSockets); Console.WriteLine("Client connection accepted. There are {0} clients connected to the server", m_numConnectedSockets); // Get the socket for the accepted client connection and put it into the //ReadEventArg object user token SocketAsyncEventArgs readEventArgs = m_readWritePool.Pop(); ((AsyncUserToken)readEventArgs.UserToken).Socket = e.AcceptSocket; // As soon as the client is connected, post a receive to the connection bool willRaiseEvent = e.AcceptSocket.ReceiveAsync(readEventArgs); if (!willRaiseEvent) { ProcessReceive(readEventArgs); } // Accept the next connection request StartAccept(e); }