소켓 지정번호 s 에 접속된 호스트정보를 알아오고 싶을때 사용한다.
#include <sys/socket.h> int getpeername(int s, struct sockaddr *name, socklen_t *namelen);
때때로 네트웍으로 접근한 소켓 지정번호 s 를 이용하여 접근한 호스트의 정보를 알아오고 싶을때가 있을것이다. 이럴경우 사용할수 있으며 s 에는 소켓저정번호, *name 는 알아낸 호스트의 정보를 저장할 sockaddr 구조체, 마지막 *namelen 은 name이 가리키고 있는 영역의 크기를 나타낸다.
성공할경우 0을 실패했을경우에는 -1을 반환하며, 적당한 errno 값을 설정한다.
다양한 원인에 의해서 에러가 발생할수 있으며 아래와 같은 에러 메시지들이 있다.
s 가 유효한 기술자가 아니다.
s 가 소켓이 아닌 파일일경우
소켓이 연결되어 있지 않을경우
시스템에 연산을 위해서 이용할수 있는 자원이 부족할때
#include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv) { int server_sockfd, client_sockfd; int state, client_len; struct sockaddr_in clientaddr, serveraddr, myaddr; // internet 기반의 스트림 소켓을 만들도록 한다. if ((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { perror("socket error : "); exit(0); } bzero(&serveraddr, sizeof(serveraddr)); serveraddr.sin_family = AF_INET; serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); serveraddr.sin_port = htons(12345); state = bind(server_sockfd , (struct sockaddr *)&serveraddr, sizeof(serveraddr)); if (state == -1) { perror("bind error : "); exit(0); } state = listen(server_sockfd, 5); if (state == -1) { perror("listen error : "); exit(0); } client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr, &client_len); if (client_sockfd == -1) { perror("Accept error : "); exit(0); } // 바로여기 getpeername(client_sockfd, (struct sockaddr *)&myaddr, &client_len); printf("client ip is %d\n",myaddr.sin_port); printf("client port is %s\n",inet_ntoa(myaddr.sin_addr)); close(client_sockfd); return 1; }
Copyrights © - Joinc, All Rights Reserved. Inherited From - Yundream Rebranded By - Joonphil
1장. getpeername(2)
소켓 지정번호 s 에 접속된 호스트정보를 알아오고 싶을때 사용한다.
1.1절. 사용법
1.2절. 설명
때때로 네트웍으로 접근한 소켓 지정번호 s 를 이용하여 접근한 호스트의 정보를 알아오고 싶을때가 있을것이다. 이럴경우 사용할수 있으며 s 에는 소켓저정번호, *name 는 알아낸 호스트의 정보를 저장할 sockaddr 구조체, 마지막 *namelen 은 name이 가리키고 있는 영역의 크기를 나타낸다.
1.3절. 반환값
성공할경우 0을 실패했을경우에는 -1을 반환하며, 적당한 errno 값을 설정한다.
1.4절. 에러
다양한 원인에 의해서 에러가 발생할수 있으며 아래와 같은 에러 메시지들이 있다.
s 가 유효한 기술자가 아니다.
s 가 소켓이 아닌 파일일경우
소켓이 연결되어 있지 않을경우
시스템에 연산을 위해서 이용할수 있는 자원이 부족할때
1.5절. 예제
Recent Posts
Archive Posts
Tags