msgsnd() 호출이 Fail되고 errno가 EAGAIN으로 나오는 것은 보통 Queue가 꽉 차서 쓰지 못했기 때문입니다.
원래 queue가 꽉 차면 queue가 비어서 message를 쓸 수 있을 때 까지 Block되어야 하지만, msgsnd(..., IPC_NOWAIT)로 플래그를 지정한다면 kernel은 바로 return시킨 후 errno를 EAGAIN으로 setting합니다.
또 한가지 조건은 플래그가 설정되어 있고, 시스템 전반에 걸쳐 너무 많은 메시지가 존재할 경우 입니다. 시스템 마다 다를 수 있겠지만 보통 한번에 큐잉할 수 있는 메시지의 max 값이 정해진 것으로 압니다.
Quote:
EAGAIN : The IPC_NOWAIT flag is set, and either the maximum number of message headers has been allocated or the message queue is full.
구글에 검색해 보세요 8) 그리고 http://bbs.kldp.o
구글에 검색해 보세요 8)
그리고 http://bbs.kldp.org/viewtopic.php?t=21089
에 덧글로 쓰는게 나을것 같습니다만..
msgsnd() 호출이 Fail되고 errno가 EAGAIN으로 나오는
msgsnd() 호출이 Fail되고 errno가 EAGAIN으로 나오는 것은 보통 Queue가 꽉 차서 쓰지 못했기 때문입니다.
원래 queue가 꽉 차면 queue가 비어서 message를 쓸 수 있을 때 까지 Block되어야 하지만, msgsnd(..., IPC_NOWAIT)로 플래그를 지정한다면 kernel은 바로 return시킨 후 errno를 EAGAIN으로 setting합니다.
또 한가지 조건은 플래그가 설정되어 있고, 시스템 전반에 걸쳐 너무 많은 메시지가 존재할 경우 입니다. 시스템 마다 다를 수 있겠지만 보통 한번에 큐잉할 수 있는 메시지의 max 값이 정해진 것으로 압니다.
댓글 달기