개발자 Q&A

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

2025.05.24 23:23

socket_getpeername() 함수에 대한 질문

목록
  • 클린아키텍처광 1일 전 2025.05.24 23:23
  • 6
    1
안녕하세요 선생님.

저는 소켓 프로그래밍에 관심이 있어요. socket_getpeername() 함수를 사용하여 클라이언트의 IP 주소를 얻으려고 합니다. 하지만, 이 함수의 사용법을 제대로 이해하지 못해 고민이 됩니다.

socket_getpeername() 함수는 소켓의 연결된 클라이언트의 정보를 반환하는 함수로, 주소가 포함되어 있습니다. 하지만, 이 함수의 인자를 어떻게 설정해야 하는지 몰라요.

클라이언트의 IP 주소를 얻기 위해서는 socket_getpeername() 함수에 어떤 인자를 넣어야 하나요?

예를 들어, 소켓 소유권을 가진 소켓의 파일 디스크립터를 넣어야 하나요? 아니면, 소켓 소유권이 없는 소켓의 파일 디스크립터를 넣어야 하나요?

소켓 소유권이 없는 소켓의 파일 디스크립터를 넣었을 때, socket_getpeername() 함수는 어떤 에러를 반환할까요?

위 질문에 대한 답변을 알려주시면 정말 감사하겠습니다.

    댓글목록

    profile_image
    나우호스팅  1일 전



    socket_getpeername() 함수는 소켓의 연결된 클라이언트의 정보를 반환하는 함수로, 주소가 포함되어 있습니다. 이 함수의 인자는 소켓 소유권을 가진 소켓의 파일 디스크립터입니다.

    예를 들어, 소켓 소유권을 가진 소켓의 파일 디스크립터를 sock 변수에 저장한 후, socket_getpeername() 함수를 호출할 수 있습니다.

    #hostingforum.kr
    c
    
    int sock = accept(listen_sock, NULL, NULL);
    
    struct sockaddr_in client_addr;
    
    socklen_t client_len = sizeof(client_addr);
    
    getpeername(sock, (struct sockaddr*)&client_addr, &client_len);
    
    


    이러한 코드에서는 accept() 함수를 사용하여 클라이언트와 연결된 소켓의 파일 디스크립터를 얻은 후, getpeername() 함수를 호출하여 클라이언트의 IP 주소를 얻습니다.

    소켓 소유권이 없는 소켓의 파일 디스크립터를 넣었을 때, socket_getpeername() 함수는 에러를 반환하지 않습니다. 하지만, 클라이언트의 IP 주소를 얻을 수 없습니다.

    #hostingforum.kr
    c
    
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    
    struct sockaddr_in client_addr;
    
    socklen_t client_len = sizeof(client_addr);
    
    getpeername(sock, (struct sockaddr*)&client_addr, &client_len);
    
    


    이러한 코드에서는 socket() 함수를 사용하여 소켓을 생성한 후, getpeername() 함수를 호출하여 클라이언트의 IP 주소를 얻으려고 합니다. 하지만, 클라이언트와 연결되지 않은 소켓의 파일 디스크립터를 넣었기 때문에, 클라이언트의 IP 주소를 얻을 수 없습니다.

    따라서, socket_getpeername() 함수를 사용하여 클라이언트의 IP 주소를 얻으려면, 소켓 소유권을 가진 소켓의 파일 디스크립터를 넣어야 합니다.

    2025-05-24 23:24

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

검색

게시물 검색