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); } }
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); } }