C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[62048] (인디사용)소켓통신시 에러처리 방법 문의드립니다.
newhuni [] 1735 읽음    2010-07-29 17:37
Indy컴포넌트를 이용하여 서버-클라이언트를 구성하였습니다.
Server1 : Client1의 통신에서는 정상적으로 동작합니다.
그런데 Server1 : Client(n)의 통신시 동작중에 " WSAENOBUFS (10055) No buffer space available. "
에러 메시지가 발생합니다.

메시지를 보면 사용가능한 버퍼 공간이 부족하다는 뜻인데...

1)
Server와 Client의 통신 데이타는 한번에 150바이트가 넘지 않습니다.
그리고 RecvBufferSize, SendBufferSize의 경우 모두 32768입니다.
이 정도면 상당히 큰 사이즈 아닌가요??
버퍼 사이즈를 늘려야 한다면 어떤 함수를 사용해야 하나요?

2)
해당 오류발생시 처리 방법이 궁금합니다.
아래의 서버 예외처리 함수에서 처리하면 되는건가요??
void __fastcall TMainForm::IdTCPServerException(TIdPeerThread *AThread,
      Exception *AException)
{       
                int ErrorCode = ((EIdSocketError *)AException)->LastError;
                if(ErrorCode == 10055)
               {
                     // 해당 클라이언트 쓰레드의 송/수신 버퍼를 클리어하고
                     // 에러코드를 0으로 초기화한다...
               }
}

3)
아래 코드는 클라이언트로부터 패킷을 수신 받는 루틴입니다.
각 클라이언트의 통신 쓰레드가 인수로 전달된 AThread로 알고있습니다.
그렇다면 여러개의 클라이언트와 통신할 때 아래의 buf변수는 어떻게 되나요?
buf는 클라이언트에 하나씩 있어야 하는데...
아래와 같이 코딩하면 여러 클라이언트에서 독립적으로 buf변수를 사용하게 되나요?

(클라이언트로부터 데이타 받은 뒤 정상데이타라면 해당 명령에 따라 클라이언트에 데이타를 전송한다.)
void __fastcall TMainForm::IdTCPServerExecute(TIdPeerThread *AThread)
{   
   unsigned char buf[MAX_PACKET] = {0,};

   try
   {
         AThread->Connection->ReadBuffer(buf, MAX_PACKET);
   }catch(...){}

   // Check Check Sum
   unsigned int CheckSum = buf[0] + buf[1] + buf[2] + buf[3] + buf[4] + buf[5];
   if( CheckSum != (unsigned int)((buf[6]<<8) | buf[7]) ) return;

   // Make Tx Packet
   SendTx();
   //----------------------------------------------------------------------//
}

고수님의 조언부탁드립니다.
감사합니다.

+ -

관련 글 리스트
62048 (인디사용)소켓통신시 에러처리 방법 문의드립니다. newhuni 1735 2010/07/29
62051     Re:(인디사용)소켓통신시 에러처리 방법 문의드립니다. 땅주인 2378 2010/07/29
62056         Re:Re:(인디사용)소켓통신시 에러처리 방법 문의드립니다. newhuni 2102 2010/07/30
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.