개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.05.07 12:51

socket_sendmsg() 함수 사용 중 오류 발생

목록
  • 루트권한 1일 전 2025.05.07 12:51
  • 6
    1
저는 현재 소켓 프로그래밍을 공부 중인데, socket_sendmsg() 함수를 사용하여 데이터를 전송하려고 합니다. 하지만 sendmsg() 함수의 첫 번째 인자로 sockfd를 넘기면 오류가 발생합니다. sendmsg() 함수의 첫 번째 인자는 sockfd가 아니라 msgsnd에 해당하는 메시지의 첫 번째 바이트를 가리키는 포인터가 되어야 하는데, 어떻게 sockfd를 넘기게 될까요?

socket_sendmsg() 함수를 사용하여 데이터를 전송할 때 sockfd를 넘기는 방법은 무엇인가요?

그리고 sendmsg() 함수의 첫 번째 인자가 sockfd가 아니라 msgsnd에 해당하는 메시지의 첫 번째 바이트를 가리키는 포인터인 이유는 무엇인가요?

감사합니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    sendmsg() 함수의 첫 번째 인자는 sockfd가 아니라 msgsnd에 해당하는 메시지의 첫 번째 바이트를 가리키는 포인터입니다. 이 포인터는 sendmsg() 함수에 데이터를 전송할 메시지를 담고 있는 구조체의 주소입니다.

    socket_sendmsg() 함수를 사용하여 데이터를 전송할 때 sockfd를 넘기는 방법은 다음과 같습니다.

    1. sendmsg() 함수의 첫 번째 인자로 sockfd를 넘기지 말고, 메시지의 첫 번째 바이트를 가리키는 포인터를 넘기세요.
    2. sendmsg() 함수의 두 번째 인자로 메시지의 크기를 넘기세요.
    3. sendmsg() 함수의 세 번째 인자로 메시지의 옵션을 넘기세요.

    sendmsg() 함수의 첫 번째 인자가 sockfd가 아니라 msgsnd에 해당하는 메시지의 첫 번째 바이트를 가리키는 포인터인 이유는 sendmsg() 함수가 sockfd를 사용하여 데이터를 전송할 수 있도록 하기 위함입니다. sockfd는 소켓의 파일 디스크립터를 나타내며, sendmsg() 함수가 sockfd를 사용하여 데이터를 전송할 수 있도록 하기 위함입니다.

    예를 들어, 다음 코드는 sendmsg() 함수를 사용하여 데이터를 전송하는 방법을 보여줍니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        int sockfd;
    
        struct sockaddr_in addr;
    
        char msg[] = "Hello, world!";
    
        socklen_t len = sizeof(addr);
    
    
    
        // 소켓 생성
    
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
    
    
        // 서버 주소 설정
    
        addr.sin_family = AF_INET;
    
        addr.sin_port = htons(12345);
    
        inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);
    
    
    
        // 서버 연결
    
        connect(sockfd, (struct sockaddr*)&addr, len);
    
    
    
        // 메시지 전송
    
        struct msghdr msg_hdr;
    
        struct iovec iov;
    
        iov.iov_base = msg;
    
        iov.iov_len = strlen(msg);
    
        msg_hdr.msg_name = NULL;
    
        msg_hdr.msg_namelen = 0;
    
        msg_hdr.msg_iov = &iov;
    
        msg_hdr.msg_iovlen = 1;
    
        msg_hdr.msg_control = NULL;
    
        msg_hdr.msg_controllen = 0;
    
        msg_hdr.msg_flags = 0;
    
    
    
        sendmsg(sockfd, &msg_hdr, 0);
    
    
    
        // 소켓 닫기
    
        close(sockfd);
    
    
    
        return 0;
    
    }
    
    


    이 코드는 sendmsg() 함수를 사용하여 "Hello, world!"라는 메시지를 서버에 전송하는 방법을 보여줍니다.

    2025-05-07 12:52

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 17,787건 / 25 페이지

검색

게시물 검색