recvmsg 에 대한 질문입니다.

air74의 이미지

아리송 합니다.

recvfrom 하면 data 가 받아지며 받은 data 수 만큼 return 값을 주지만 recvmsg 를 사용하면 return 값이 0 이 됩니다.

이유를 모르겠습니다. man page 에 의하면 recvmsg 도 받은 byte 수를 return 하는거 같은데..

혹시 원인 아시는 분은 알려주시면 고맙겠습니다.

  struct iovec  iovector[2]; 
  struct msghdr hdr;

  bzero(&hdr, sizeof(hdr));
  hdr.msg_name = &addr;
  hdr.msg_namelen = addrlen;
  hdr.msg_iov = iovector;
  hdr.msg_iovlen = 2;
  hdr.msg_control = NULL;
  hdr.msg_controllen = 0;
  hdr.msg_flags = 0;

  rval = recvmsg(sock_fd, &hdr, 0); /* -> 항상 리턴값 0 data 안 받아짐 */
  bufferlen = 1500;
  rval = recvfrom(sock_fd, buffer_test, bufferlen, 0, (struct sockaddr *)&client_addr, &client_len); /* 정확하게 받은 바이트 return */