EAGAIN은 주로 비차단(non-blocking) 모드에서 작동하는 소켓이나 파일 디스크립터를 다룰 때 발생하는 표준 오류 코드이다. 이 오류 코드는 데이터가 즉시 사용 가능하지 않을 때 반환된다. 즉, 현재 읽거나 쓰려는 데이터가 아직 도착하지 않았거나 준비되지 않은 상태를 나타낸다. 이를 처리하기 위해 루프를 돌면서 다시 시도해야 한다.
즉 EAGAIN 이 반환이되면 오류가아니라 유저가 아무것도 보내지 않았다는 뜻.
자세한 설명
- 읽기(read) 작업에서의 EAGAIN: read 함수 호출 시 EAGAIN이 반환되면, 현재 읽을 데이터가 없다는 의미. 즉, 데이터가 준비되지 않았으므로 나중에 다시 시도.
- 쓰기(write) 작업에서의 EAGAIN: write 함수 호출 시 EAGAIN이 반환되면, 쓰기 버퍼가 꽉 차서 데이터를 쓸 수 없다는 의미. 즉, 나중에 버퍼가 비워질 때 다시 시도.
예시 코드
int bytes_read;
while ((bytes_read = read(client_fd, buffer, sizeof(buffer))) > 0) {
// 데이터 처리
}
if (bytes_read == -1 && errno != EAGAIN) {
// 오류 처리
perror("Read error");
} else if (bytes_read == -1 && errno == EAGAIN) {
// 데이터가 아직 도착하지 않음
printf("EAGAIN received for client %d\n", client_fd);
즉 errno != EAGAIN 은 오류가 났다는 뜻이다. 비차단모드에서 기다리는게 아닌.
'개인공부 > 네트워크' 카테고리의 다른 글
| 바이너리 전송 방식 vs 텍스트 전송 방식 (0) | 2025.04.30 |
|---|---|
| TCP/IP 의 송수신 원리 한눈에 (0) | 2025.01.28 |
| epoll 의 Edge-Triggered 방식 (0) | 2025.01.23 |
| epoll vs 멀티스레딩 (0) | 2025.01.23 |
| DPDK 패킷 처리 (0) | 2025.01.22 |