서버소켓에서 나에게 접속한 클라이언트 IP를 가져오는 함수가 존재한다.
로그파일을 만들 때 사용하는 건가?
int Getpeername( sock, struct sockaddr* name, int *size )
sock : IP를 알고자 하는 소켓의 파일 디스크립터.
struct sockaddr* name : 소켓 정보를 저장할 sockaddr_in구조체
int *size : 구조체 사이즈.
ex)
struct sockaddr_in test_adr;
adr_sz=sizeof(clin_adr);
getpeername(sock,(struct sockaddr*)&test_adr,&adr_sz);
위와 같이 선언한다면, test_adr구조체 변수안에 접속한 클라이언트의 정보가 기록된다.
하지만 위와 같이 선언하고 출력해보면.
우리가 알수 없는 정수형으로 값이 저장되어 있다.
sockaddr_in 구조체의 주소멤버의 데이터 타입은 unsigned long이다.
따라서 네트워크바이트 순서인 32비트 값을 변환시켜주어야 한다.
이러한 경우에 사용하는 함수가 inet_ntoa()함수이다.
char *inet_ntoa(struct in_addr addr)
성공시 변환된 해당 문자열의 포인터를 반환하고, 실패할 경우에는 -1을 반환한다.
'Programming > Socket' 카테고리의 다른 글
I/O 멀티플렉싱 (0) | 2012.05.15 |
---|---|
로그파일을 남기는 서버 (0) | 2012.05.14 |
멀티프로세스 소스 (0) | 2012.05.10 |
멀티프로세스 서버 (0) | 2012.05.08 |
소켓의 옵션 (0) | 2012.05.07 |