본문 바로가기

개인공부/네트워크

epoll 의 EAGAIN

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