728x90
tcp recv는 패킷길이가 10이라고 서로 규정을 하고 10을 보낸다하더라도
한번에 8이 올수도있고 10이 올수도 있다.
여러번으로 나뉘어 올 수도 있다는 것이다. 그렇기때문에 tcp recv로 받을 때는 패킷의 길이를 측정해서
나뉘어왔다면 붙여서 내려받는 방법이 있다.
int Tcp_Recvn (int p_sfd, char *p_buf, int p_len)
{
int retry_cnt, msg_len;
int buf_sz;
buf_sz = p_len;
retry_cnt = 0;
while (buf_sz > 0)
{
msg_len = recv (p_sfd, p_buf, buf_sz, 0);
if (msg_len < 0)
{
if (SYS_NO == EAGAIN)
{
if (retry_cnt > 50)
return (NOTOK);
retry_cnt ++;
continue;
}
else
return (msg_len);
}
else if (msg_len == 0)
break;
buf_sz -= msg_len;
p_buf += msg_len;
}
if (retry_cnt > 5)
printf("Tcp_Recvn:recv(EAGAIN) count[%d]", retry_cnt);
return (p_len - buf_sz);
}
728x90
'개발 업무(코딩)-개발자였을때 썼던..' 카테고리의 다른 글
C-JSON EXAMPLE 예제 3 - ARRAY 다른형태 (0) | 2023.01.09 |
---|---|
mysql(mariadb)에서 .sql 파일 실행시키기 (0) | 2023.01.09 |
리눅스 서버 설치(대략적인 순서) (0) | 2023.01.09 |
execl 로 프로세스 실행시키기 (0) | 2023.01.09 |
c-java(클라) tr전문 테스트용 샘플 (0) | 2023.01.09 |