[질문] Socket Programming (sendmsg(), recvmsg() example)

skjean의 이미지

요즘 자주 질문을 올리게 됩니다.
그만큼 모르는게 많음을 실감하게 됩니다. -.-;;
하지만 발전이 있음을 희망하면서... ^^;; (도움 부탁드립니다.)
-------------
socket에서 sendmsg()와 recvmsg()를 이용해서 코딩을 하려고
하는데.. recvmsg()를 이용해서 메시지 수신하기가 수월치 않네요..
둘다 iovec를 이용하거든요...

sendmsg()의 경우는 다음과 같이 만들어서 메시지를 보냅니다. (잘 갑니다.)
recvmsg()는 어떤식으로 받아야 하는지 example이 있으면 좀 부탁드립니다.

   struct msghdr        Msghdr;
   struct iovec         Iov;

   /* ...... */

    Iov.iov_base = (void *)msgcontent;
    Iov.iov_len = sizeof(msgcontent);

    Msghdr.msg_name = &their_addr;
    Msghdr.msg_namelen = sizeof(struct sockaddr_in);
    Msghdr.msg_iov = (struct iovec *) &Iov;
    Msghdr.msg_iovlen = 1;
    Msghdr.msg_control = NULL;
    Msghdr.msg_controllen = 0;
    
    numbytes = sendmsg(sockfd, &Msghdr, 0);

좋은 하루 되세요...

skjean의 이미지

자문 자답입니다. (어렵사리 example을 구했습니다.)

site :
http://www.sikurezza.org/devel/msg00122.html

다음과 같이 수신하면 되겠습니다.
--------------------------

    char    buf[MAXBUFLEN];
    struct sockaddr_in  their_addr; 
    struct msghdr       Msghdr;
    struct iovec        Iovec;

    Iovec.iov_base = (void *)buf;
    Iovec.iov_len = sizeof(buf);

    Msghdr.msg_name = &their_addr;
    Msghdr.msg_namelen = sizeof(struct sockaddr_in);
    Msghdr.msg_iov = &Iovec;
    Msghdr.msg_iovlen = 1;

    numbytes = recvmsg(sockfd, &Msghdr, 0);