/// <summary> /// 비동기 전송을 시작한다. /// </summary> void StartSend() { Console.WriteLine(this + " StartSend"); lock (this.lockQueue) { // 전송이 아직 완료된 상태가 아니므로 데이터만 가져오고 큐에서 제거하진 않는다. CPacket _packet = this.sendingQueue.Peek(); // 헤더에 패킷 사이즈를 기록한다. _packet.WriteSize(); // 이번에 보낼 패킷 사이즈 만큼 버퍼 크기를 설정하고 this.sendArgs.SetBuffer(this.sendArgs.Offset, _packet.position); // 패킷 내용을 SocketAsyncEventArgs버퍼에 복사한다. Array.Copy(_packet.buffer, 0, this.sendArgs.Buffer, this.sendArgs.Offset, _packet.position); Console.WriteLine(" > sendArgs.Offset:{0} ~> .position:{1} ", sendArgs.Offset, _packet.position); // 비동기 전송 시작. bool pending = this.socket.SendAsync(this.sendArgs); Console.WriteLine(" > 전송등록 pending:{0}", pending); if (!pending) { Console.WriteLine(" > 전송등록후 바로 보내버렸다."); SendProcess(this.sendArgs); } } }