
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