■ 소켓 생성 시 사용되는 인자 도메인은 PF_INET과 AF_INET이 있다.
- PF_INET는 프로토콜 체계(프로토콜 패밀리)중 하나이고, AF_INET는 주소 체계(주소 패밀리)중 하나이다.


(1) PF_INET 프로토콜 체계

 프로토콜 체계(Protocol Family)  정의
 PF_INET IPv4인터넷 프로토콜
 PF_INET6 IPv6인터넷 프로토콜
 PF_LOCAL LOCAL 통신을 위한 UNIX 프로토콜
 PF_PACKET Low level socket을 위한 인터페이스
 PF_IPX IPX 노벨 프로토콜

소켓을 만들 때는 소켓이 사용될 환경을 고려해 프로토콜을 설정해 주어야 합니다.
다시 말해 프로토콜 패밀리는 소켓을 생성할 때 이 소켓이 어떤 프로토콜을 사용해 통신을 할지 정해줍니다.
참고로 소켓은 네트워크 통신을 할때만 사용되는 것은 아닙니다.
유닉스 계열의 시스템에서 시스템 내부의 프로세스들끼리 통신을 하기 위해서도 사용됩니다.
자주 사용되는 PF_INET는 프로토콜 패밀리중 하나입니다. 


(2) AF_INET 주소 체계

 주소체계(Address Family) 정의
 AF_INET  IPv4인터넷 프로토콜
 AF_INET6  IPv6인터넷 프로토콜
 AF_LOCAL  LOCAL 통신을 위한 UNIX 프로토콜

이 들은 주소 구조체 안에 주소 패밀리를 정의할 때 사용합니다.
프로토콜 체계를 나타내는 PF_INET와 주소체계를 나타내는 AF_INET 는 같은 상수 값을 가지고 있습니다.
그렇다고 해서 주소정보를 설정하는 부분에 PF_INET를 사용하고 프로토콜 패밀리 정보를 설정하는 부분에 AF_INET를 넣는 것은 좋지 않습니다.

결과적으로, 프로토콜 체계를 설정하는 부분은 PF로 시작하는 상수를 사용하고, 주소 체계를 설정하는 부분은 AF로 시작하는 상수를  사용하는 것이 좋습니다.

실제 코딩 부분에서 socket()함수에 프로토콜 패밀리에 AF_INET를 넣어도 되지만 PF_INET를 넣는게 바람직하고,
struct sockaddr_in 구조체에 주소 체계를 넣을 때에도 PF_INET 를 넣어도 되지만 AF_INET를 넣는게 바람직하다.



※ 출처 : http://blog.naver.com/l18400?Redirect=Log&logNo=60109296392

by 민트앤라떼 2012. 2. 27. 11:45