Tuesday, June 24, 2008

Utility functions


struct hostent {
char *h_name;
char **h_aliases;
int h_addrtype; /* AF_INET */
int h_length; /* h_addr_list length */
char **h_addr_list;
}

위 hostent의 h_addr_list는 network byte order로 된 in_addr인데, h_addr_list는 char ** 이므로, 이를 실제로 사용할 때는 inet_ntoa(*(int *)h_addr_list[i]) 식으로 하면 4byte를 읽어 inet_ntoa에 넣게 되므로 값을 확인해볼 수 있다. 아래는 각 함수별 설명이다.

gethostbyname(...) 은 호스트 이름으로 hostent 를 가지고 오는 함수이다.

gethostbyaddr(...) 는 IP주소로 hostent를 가지고 오는 함수이다

getsockopt(...), setsockopt(...) 는 소켓 옵션 관련 함수이고, 앞에서 했고,..

getsockname(...) 은 bind된 sockaddr 정보를 얻어오는 함수이다 (자동 할당된 포트 번호 확인 시 사용)

getpeername(...) 은 반대로 연결된 상대편의 sockaddr정보를 얻어오는 함수이다

getservent(), getservbyname(), getservbyport() 함수들은 /etc/services파일을 가져오는 함수들이다(전체 다 가져오거나, 서비스 이름으로 찾거나, 포트 번호로 찾는 함수)


getprotoent(), getprotobyname(), getprotobynumber() 역시 마찬가지로 /etc/protocols 파일을 가져오는 함수들이다.


위 두그룹들은 각각 serverent, protoent 구조체를 알아야 한다.


주소변환 함수 그룹들은 지난번에 기록한것 같은데 이름만 다시 정리하면, inet_addr/inet_aton, inet_pton, inet_ntoa, inet_ntop 이다. pton, aton의 차이는 리턴되는 값을 static공간에 담아주냐 아니냐의 문제인데, reentrant를 고려하여 제공되는 함수가 pton, ntop 군이니 필요할 때 구별해서 쓰면된다.

No comments:

Post a Comment