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
[21834] [질문] 환장.. BCB 윈소켓.... -_-
아제나 [azena] 822 읽음    2002-10-02 06:37
아래 소스의 좀 봐주세요. 가끔 프로그램을 먹통으로 만드는 문제가 있습니다.

위치는 SendBuf() 함수 호출 부분이구요. (전체 프로그램 응답없음)

멈추는 상황은... SendBuf()를 한참 하던 중에 커넥션이 끊겼을 경우 입니다.

접속이 유지되는 상태에서는 멈추거나 하는 문제가 없구요......

정지 상태에서 Stop을 시켜서 CPU View로 보면,

WaitForMultipleObjects에 무한 루프가 걸려 있습니다.

(컴파일러 BCB 5, 윈도우 2000에서 테스트 했습니다)

TWinSocketStream에 문제가 있어서 stNonBlocking 으로 바꿨는데도 이 모양이네요 -_-;;

차라리 윈소켓 부분을 내가 직접 만들어서 쓰는 편이 빠르겠다라는 생각까지 들 정도 입니다...

짜증 이빠이 나네요 -_-++++




bool __fastcall TServerThread::Puts( void *pBuffer, int BufSize )
{
  int Result, SendSize = 0;

  char *pSplit = (char *)pBuffer;                // 버퍼를 나누기 위한 임시 변수

  SocketTimeOut = P2P_SERVER_SOCKET_TIMEOUT;
  BeginTime     = GetTickCount();

  while( BufSize > SendSize )
  {
    if( BeginTime+SocketTimeOut <= GetTickCount() )        // 시간 초과?
      return false;

    if( !IsContinue() )                         // 접속 종료나 스레드 종료시 false 리턴
      return false;

    if( (BufSize-SendSize) >= P2P_PACKET_SIZE )
    {
      Result = ClientSocket->SendBuf( &pSplit[SendSize], P2P_PACKET_SIZE ); // 멈추는 부분

      if( Result > 0 )
        SendSize += Result;
    }
    else
    {
      Result = ClientSocket->SendBuf( &pSplit[SendSize], BufSize-SendSize ); // 멈추는 부분

      if( Result > 0 )
        SendSize += Result;
    }

    Application->ProcessMessages();              // 안돼서 걍 넣어봄 -_-
    Sleep(1);                                    // 오버헤드 방지
  }

  if( SendSize >= BufSize )                      // 전송이 성공되었는가?
    return true;                                 // Always true
  else
    return false;
}

+ -

관련 글 리스트
21834 [질문] 환장.. BCB 윈소켓.... -_- 아제나 822 2002/10/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.