개발자 Q&A

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

2025.06.01 12:27

socket_getpeername 함수에 대한 질문

목록
  • GCP전문가 5일 전 2025.06.01 12:27
  • 29
    1
제가 현재 socket programming을 공부 중인데, socket_getpeername 함수에 대해 이해가 잘 안 가는 부분이 있습니다.

socket_getpeername 함수는 소켓의 연결된 상대방의 주소 정보를 가져올 수 있는 함수 인가요?

이 함수를 사용하면 소켓의 연결된 상대방의 주소와 포트를 어떻게 가져올 수 있는가요?

그리고 이 함수는 TCP, UDP 소켓 모두 사용할 수 있는가요?

혹시 socket_getpeername 함수의 사용 예를 알려주실 수 있을까요?

예를 들어, 다음과 같은 코드가 있다면 어떻게 사용해야 하는가요?

c

#include 



int main() {

    int sockfd = socket(AF_INET, SOCK_STREAM, 0);

    // ...

    struct sockaddr_in peer_addr;

    socklen_t peer_len = sizeof(peer_addr);

    getpeername(sockfd, (struct sockaddr *)&peer_addr, &peer_len);

    // ...

    return 0;

}



이 코드에서 getpeername 함수는 어떻게 사용되고 있는가요?

혹시 socket_getpeername 함수를 사용하는 경우, 에러가 발생할 수 있는 상황이 있을까요?

그리고 에러가 발생한 경우, 어떻게 해결할 수 있는가요?

이러한 질문을 통해 socket_getpeername 함수에 대한 이해를 높이고, 실제로 사용할 수 있는 방법을 배울 수 있는지 궁금합니다.

    댓글목록

    profile_image
    나우호스팅  5일 전



    socket_getpeername 함수는 소켓의 연결된 상대방의 주소 정보를 가져올 수 있는 함수입니다.

    이 함수를 사용하려면, 소켓의 파일 디스크립터를 전달해야 합니다. 소켓의 연결된 상대방의 주소 정보는 struct sockaddr 형식으로 반환됩니다.

    이 함수는 TCP, UDP 소켓 모두 사용할 수 있습니다.

    socket_getpeername 함수를 사용하는 예를 살펴보겠습니다.

    #hostingforum.kr
    c
    
    #include 
    
    
    
    int main() {
    
        int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
        // ...
    
    
    
        struct sockaddr_in peer_addr;
    
        socklen_t peer_len = sizeof(peer_addr);
    
    
    
        // getpeername 함수를 사용하여 소켓의 연결된 상대방의 주소 정보를 가져옵니다.
    
        getpeername(sockfd, (struct sockaddr *)&peer_addr, &peer_len);
    
    
    
        // ...
    
        return 0;
    
    }
    
    


    이 코드에서 getpeername 함수는 sockfd 파일 디스크립터를 전달받아, 연결된 상대방의 주소 정보를 struct sockaddr_in 형식으로 반환합니다.

    socket_getpeername 함수를 사용할 때, 에러가 발생할 수 있는 상황은 다음과 같습니다.

    - 소켓이 연결되지 않은 경우
    - 소켓의 파일 디스크립터가 유효하지 않은 경우
    - struct sockaddr 형식이 유효하지 않은 경우

    에러가 발생한 경우, 다음과 같이 해결할 수 있습니다.

    - 소켓이 연결되지 않은 경우: 연결을 먼저 수행해야 합니다.
    - 소켓의 파일 디스크립터가 유효하지 않은 경우: 유효한 파일 디스크립터를 전달해야 합니다.
    - struct sockaddr 형식이 유효하지 않은 경우: 유효한 struct sockaddr 형식을 전달해야 합니다.

    예를 들어, 다음과 같이 에러를 처리할 수 있습니다.

    #hostingforum.kr
    c
    
    #include 
    
    #include 
    
    
    
    int main() {
    
        int sockfd = socket(AF_INET, SOCK_STREAM, 0);
    
        // ...
    
    
    
        struct sockaddr_in peer_addr;
    
        socklen_t peer_len = sizeof(peer_addr);
    
    
    
        if (getpeername(sockfd, (struct sockaddr *)&peer_addr, &peer_len) == -1) {
    
            // 에러 처리
    
            if (errno == ENOTCONN) {
    
                // 소켓이 연결되지 않은 경우
    
                printf("소켓이 연결되지 않았습니다.n");
    
            } else if (errno == EBADF) {
    
                // 소켓의 파일 디스크립터가 유효하지 않은 경우
    
                printf("유효하지 않은 파일 디스크립터입니다.n");
    
            } else if (errno == EINVAL) {
    
                // struct sockaddr 형식이 유효하지 않은 경우
    
                printf("유효하지 않은 struct sockaddr 형식입니다.n");
    
            } else {
    
                // 기타 에러
    
                printf("기타 에러: %sn", strerror(errno));
    
            }
    
        } else {
    
            // 성공
    
            printf("성공적으로 연결된 상대방의 주소 정보를 가져왔습니다.n");
    
        }
    
    
    
        return 0;
    
    }
    
    

    2025-06-01 12:28

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

검색

게시물 검색