서버소켓에서 나에게 접속한 클라이언트 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

+ Recent posts