책을 보다보면 소켓생성 시 어떤 책엔 PF_INET을 쓰고 어떤책은 AF_INET을 사용합니다.
정확히 PF_INET과 AF_INET의 뜻을 알아야겠죠?
PF_INET은 프로토콜 체계(프로토콜 패밀리)중 하나이고, AF_INET은 주소 체계(주소 패밀리)중 하나입니다.
프로토콜 패밀리는 아래와 같은 종류가 있습니다.
프로토콜 체계 (Protocol Family) | 정의 |
PF_INET | IPv4 인터넷 프로토콜 |
PF_INET6 | IPv6 인터넷 프로토콜 |
PF_LOCAL | Local 통신을 위한 UNIX 프로토콜 |
PF_PACKET | Low level socket을 위한 인터페이스 |
PF_IPX | IPX 노벨 프로토콜 |
소켓을 만들 때는 소켓이 사용될 환경을 고려해 프로토콜을 설정해 주어야 합니다.
다시 말해 프로토콜 패밀리는 소켓을 생성할 때 이 소켓이 어떤 프로토콜을 사용해 통신을 할지 정해줍니다.
참고로 소켓은 반드시 네트워크를 통해 통신할 때만 사용되는 것은 아닙니다.
유닉스 계열의 시스템에서 시스템 내부의 프로세스들끼리 통신을 하기 위해서도 사용됩니다.
자주 사용되는 PF_INET은 프로토콜 패밀리중 하나입니다.
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/ifkiller/70081338273