|
unitas 님이 쓰신 글 :
: UDP 통신 프로그램을 하고 있는데 수신받는 부분은 아래처럼 구현을 했습니다.
:
: 데이타가 수신되면 아래 check_read_sock() 로 가서 read_sock()를 호출해서 데이타가 들어옵니다.
: 데이타는 잘 들어옵니다.
: 문제는 실제로 수신되는 데이타는 1036 byte 입니다.
: 아래처럼 2048 로 잡아도 buf 확인해보면 1024 byte만 들어옵니다.
: (1024 byte만 들어온다는 것이 크기가 0~1023 까지만 잡혀있습니다.)
:
: 문제가 어디 있는지 아시는 분 부탁드리겠습니다.
:
:
: void cSrvSockUtil::read_sock()
: {
: BYTE buf[2048];
:
: int rtn;
: int cl_size;
:
: memset(buf, 0x00, sizeof(buf));
:
: cl_size = sizeof(cliSrv[s].cli_addr);
:
: rtn = recvfrom(lsn_sock, buf, 2048, 0, (SOCKADDR*)&cliSrv[s].cli_addr, &cl_size);
:
: if(rtn <= 0)
: {
: FD_CLR(cliSrv[s].cli_sock, &fd_read);
: close_sock(s);
: }
: else
: tpoll.Receiver(rtn, buf); // 수신 데이타 처리 부분 호출
: }
: //---------------------------------------------------------------------------
:
: void cSrvSockUtil::check_read_sock()
: {
: int s;
: tout.tv_sec=0;
: tout.tv_usec=0;
:
: FD_ZERO(&fd_read);
: FD_ZERO(&fd_except);
:
: FD_SET(cliSrv[i].cli_sock, &fd_read);
: FD_SET(cliSrv[i].cli_sock, &fd_except);
:
: s = select(0, &fd_read, NULL, &fd_except, &tout);
:
: if(s > 0)
: {
: if( FD_ISSET(cliSrv[i].cli_sock, &fd_except) )
: close_sock(i);
:
: if( (FD_ISSET(cliSrv[i].cli_sock, &fd_read)) )
: read_sock(0);
: }
: else if(s == 0)
: read_sock();
: }
: //---------------------------------------------------------------------------
[제 추측인데 컴퓨터나 네트워크에 내보낼때 패킷의 최대크기를 조정할수 있게 되어있는데
dts나 셋팅 부분을 체크해보세요 가령 이게 256으로 되어있으면 내가 프로그램 상에서 1024를
보내도 네트워크 카드에서 256으로 짤라보냅니다 ]
|