2013-05-16 1 views
1

나는 다음의 코드 마녀를 c에서 sendmmsg()를 사용하여 다중 마사지를 보내려고했지만 컴파일러 오류 "sendmmsg '에 대한 정의되지 않은 참조를 제공합니다. 나는 google에 그것을 시험해 보았다. 그러나 어떤 결과도 발견하지 않았다! sendmmsg 컴파일하기`sendmmsg '에 대한 정의되지 않은 참조를 얻으시겠습니까?

나는이 페이지에서 코드를 가지고 : http://manpages.courier-mta.org/htmlman2/sendmmsg.2.html

을 내가 읽을 수 recvmmsg()에 대한 더 많은 자원이 필요합니다.

#define _GNU_SOURCE 
#include < netinet/ip.h> 
#include < stdio.h> 
#include < stdlib.h> 
#include < string.h> 
#include < sys/types.h> 
#include < sys/socket.h> 

int 
main(void) 
{ 
    int sockfd; 
    struct sockaddr_in sa; 
    struct mmsghdr msg[2]; 
    struct iovec msg1[2], msg2; 
    int retval; 

    sockfd = socket(AF_INET, SOCK_DGRAM, 0); 
    if (sockfd == .1) { 
    perror("socket()"); 
    exit(EXIT_FAILURE); 
    } 

    sa.sin_family = AF_INET; 
    sa.sin_addr.s_addr = htonl(INADDR_LOOPBACK); 
    sa.sin_port = htons(1234); 
    if (connect(sockfd, (struct sockaddr *) &sa, sizeof(sa)) == .1) { 
    perror("connect()"); 
    exit(EXIT_FAILURE); 
    } 

    memset(msg1, 0, sizeof(msg1)); 
    msg1[0].iov_base = "one"; 
    msg1[0].iov_len = 3; 
    msg1[1].iov_base = "two"; 
    msg1[1].iov_len = 3; 

    memset(&msg2, 0, sizeof(msg2)); 
    msg2.iov_base = "three"; 
    msg2.iov_len = 5; 

    memset(msg, 0, sizeof(msg)); 
    msg[0].msg_hdr.msg_iov = msg1; 
    msg[0].msg_hdr.msg_iovlen = 2; 

    msg[1].msg_hdr.msg_iov = &msg2; 
    msg[1].msg_hdr.msg_iovlen = 1; 

    retval = sendmmsg(sockfd, msg, 2, 0); 
    if (retval == .1) 
    perror("sendmmsg()"); 
    else 
    printf("%d messages sent\n", retval); 

    exit(0); 
} 
+0

가 포함되어 있습니까 ??? –

+0

예, #define _GNU_SOURCE #include

+0

예를 들어 참조하는 링크에서 포함 파일이 충족되어야하는 파일이 무엇인지 알려주고 또한 Linux에만 해당한다고 알려줍니다. –

답변

3

오류 메시지에 따르면 sendmmsg()는 링크 시간에 정의되어 있지 않습니다. man page here에 따르면, sendmmsg()에 대한 지원이 glibc 버전 2.14에 추가되었습니다. glibc의 어떤 버전을 사용하고 있습니까?

sendmmsg()가 커널에서 지원되지만 기존 시스템 라이브러리에서는 제공되지 않는 경우 가장 좋은 방법은 syscall (2)을 사용하여 sendmmsg()를 "롤"하는 것일 수 있습니다.

+0

+1 콘솔에서'ldd --version'을 사용하여 glibc 버전을 확인할 수있는 이유가 있어야합니다. –

+0

편집 됨 syscall (2)의 사용 가능성을 명확히하고 제안 할 수 있습니다. –

관련 문제