
socket_recv() 함수가 무한대기 상태가 되는 경우, 주로 두 가지 원인이 있습니다.
1. 수신 데이터의 크기가 recv 버퍼의 크기보다 큰 경우입니다. 이 경우, 데이터를 나눠서 수신하는 방법을 사용할 수 있습니다. 예를 들어, 수신 데이터의 크기가 1024보다 큰 경우, 1024 크기의 데이터를 여러 번 수신하여 원본 데이터를 복원할 수 있습니다.
#hostingforum.kr
c
int recv_data[1024];
int total_len = 0;
while (total_len < data_len) {
int len = socket_recv(sock, recv_data, 1024, 0);
if (len <= 0) {
// 오류 처리
}
total_len += len;
}
2. socket_recv() 함수의 반환 값이 -1인 경우, 에러가 발생한 경우입니다. 이 경우, 에러 코드를 확인하여 오류의 원인을 파악할 수 있습니다. 예를 들어, 에러 코드가 EAGAIN 또는 EWOULDBLOCK인 경우, 데이터가 아직 수신되지 않은 경우입니다.
#hostingforum.kr
c
int len = socket_recv(sock, recv_data, 1024, 0);
if (len == -1) {
int err = errno;
if (err == EAGAIN || err == EWOULDBLOCK) {
// 데이터가 아직 수신되지 않은 경우
} else {
// 다른 오류가 발생한 경우
}
}
에러 코드를 확인하여 오류의 원인을 파악하고, 적절한 오류 처리를 수행해야 합니다.
2025-07-22 10:07