recvmsg 의 flag 에 대한 값 질문드려요
글쓴이: jinprho / 작성시간: 수, 2007/08/08 - 9:49오후
recvmsg 함수를 보면 내부에 msghdr 헤더가 있는데,
이 헤더 내의 msg_flags란 값이 있다는 것을 알았습니다.
그런데 이 헤더내의 플래그값이 어떤건 검사만하고 어떤건 검사+리턴 되고 어떤건 리턴만 된다고 봤는데,
죄송하지만 무엇을 검사한다는 것인지..
(이건 플래그 값에 따라 대강은 알겠습니다.)
무엇을 리턴한다는 것인지(이 부분을 잘 모르겠습니다.)
recvmsg에 대한 처리 과정에 대해서 대략적인 설명 부탁드립니다.
좋은 하루 보내세요~
Forums:
저도 잘 모르지만....
질문의 의도를 제대로 파악하지 못해 제 나름대로 적어 보겠습니다.
------------------------------------------
그런데 이 헤더내의 플래그값이 어떤건 검사만하고 어떤건 검사+리턴 되고 어떤건 리턴만 된다고 봤는데,
죄송하지만 무엇을 검사한다는 것인지..
(이건 플래그 값에 따라 대강은 알겠습니다.)
------------------------------------------
recvmsg 는 recv(read) 계열 함수로 소켓으로 부터 데이터를 받을때 사용합니다. 맨페이지에는 recvmsg 함수는 호출후 (소켓옵션이나 다른 설정에 의해서 기능이 조금씩 틀려짐) msghdr 의 내용을 세팅한다고 되어 있습니다.
리턴이란 함수호출을 마치고 돌아 왔다는 건데 ....
그리고 recvmsg의 처리과정이라고 함은 커널 내부 처리 과정을 말씀하신건지 .....
어쨌던 결론은 밑에 맨페이지를 보시고 이해안가는 부분을 물어 보시는게 빠를것 같습니다.
-> 영문 맨페이지
The msg_flags field in the msghdr is set on return of recvmsg(). It
can contain several flags:
MSG_EOR
indicates end-of-record; the data returned completed a record
(generally used with sockets of type SOCK_SEQPACKET).
MSG_TRUNC
indicates that the trailing portion of a datagram was discarded
because the datagram was larger than the buffer supplied.
등등...
-> 한글 맨페이지
msg_flags 필드는 받은 메세지에 따라 반환할 때 설정된다. MSG_EOR는 end-of-record를 나타낸다. 반환된 데이터가 레코드의 끝이다. (일반적으로 SOCK_SEQPACKET 형식의 소켓일 때 사용된다.) MSG_TRUNC는 데이터그램의 끝 부분을 버렸다는 것을 나타낸다. 왜냐하면 데이터그램이 제공되는 버퍼보다 크기 때문이다.
MSG_CTRUNC는 몇몇 제어 데이터들을 보조 데이터를 위한 버퍼 공간이 부족하기 때문에 버렸다는 것을 나타낸다. MSG_OOB는 급하거나 out-of-band 데이터를 받았다는 것을 가리키기 위해 반환된다. MSG_ERRQUEUE는 어떤 데이터도 받지 않았지만 소켓 오류 큐에서 오류가 확장되었다는 것을 나타낸다.
댓글 달기