Exemplo n.º 1
0
        private void AcceptClient()
        {
            try {
                for (; ;)
                {
                    if (state != GServerState.Starting && state != GServerState.Running)
                    {
                        break;
                    }

                    Socket client = null;
                    try {
                        client = socket.Accept();
                    } catch (SocketException ex) {
                    }

                    if (client == null)
                    {
                        continue;
                    }
                    if (!acceptConnection)
                    {
                        try {
                            client.Shutdown(SocketShutdown.Both);
                        } catch {
                            client.Close();
                        }
                        client = null;
                        continue;
                    }

                    client.NoDelay = socketArgs.noDelay;
                    client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, new LingerOption(socketArgs.useLinger, socketArgs.lingerTime));

                    //클라이언트 데이터 생성
                    GClientData data;
                    lock (ClientSet) {
                        data = new GClientData(client, protocol.HeaderSize);
                        ClientSet.Add(client);
                        clientDataDict.Add(client, data);
                    }

                    //이벤트 설정
                    data.sendEventArgs.Completed += Base_OnSendPacket;

                    OnClientConnected(client);

                    StartReceiveClient(data);
                }
            } catch (Exception sServerException) {
                CloseByError(sServerException);
            }
        }
Exemplo n.º 2
0
        private void StartReceiveClient(GClientData clientData)
        {
            try {
                clientData.receiveEventArgs.SetBuffer(clientData.receivedHeaderBuffer, 0, clientData.receivedHeaderBuffer.Length);
                clientData.receiveEventArgs.Completed += Base_OnHeaderReceived;

                if (!clientData.socket.ReceiveAsync(clientData.receiveEventArgs))
                {
                    Base_OnHeaderReceived(clientData.socket, clientData.receiveEventArgs);
                }
            } catch (Exception sException) {
                DisconnectClientByError(clientData.socket, sException);
            }
        }