소켓 프로그래밍을 하다보면 PF_INET를 쓰는데가 있고 AF_INET를 쓰는데가 있다.
이에 이 두개념에 대한 내용을 정리해 보고자 한다.
다음의 코드를 살펴보자.

servSock = socket(PF_INET, SOCK_STREAM, IPPTOTO_TCP);

여기서 SOCK_STREAM으로 되어있습니다. 이것은 연결형 서버를 말하는 것입니다. 즉, TCP의 서비스를 이용하겠다는 것입니다. 여기서 마지막 인자가 IPPTOTO_TCP라고 되어있는데 곡 이렇게 써주는 것은 아닙니다. 보통은 0값을 사용하나 상관은 없습니다. 명시적인 것이 좋으신 분은 IPPTOTO_TCP라고 써주시면 되겠습니다.

여기서 PF_INET를 사용했는데 AF_INET과 무엇이 다를까요?

PF는 Protocol Family의 약자이고 AF는 Address Family의 약자입니다. 글자는 달라도 내부적으로는 구분하지 않는다고 합니다. 그래서 여러 곳에서 각각 다릅니다. PF_INET를 사용하는 것이 있고  AF_INET를 사용하는 곳도 있습니다.

그러니깐 여러분들은 접두어가 자신이 알기 쉽다고 생각하시는 것을 사용하시면 될 듯합니다. 중요한 것은 IPv4라는 겁니다. IPv6는 AF_INET6이라는 것을 사용합니다. 만약에 IP프로토콜 독립적으로 구성하고자 하시려면 이것을 고려 해주셔야 합니다.

서버의 주소를 지정하고 bind 시킨 부분입니다.

 memset(&serv_addr, 0, sizeof(serv_addr));
 serv_addr.sin_family=AF_INET;     <---- 여기다가 PF_INET를 대신 써도 되겠죠~^^
 serv_addr.sin_addr.s_addr=inet_addr(serv_ip);
 serv_addr.sin_port=htons(atoi(serv_port));
 
 if(bind(serv_sock, (struct sockaddr*) &serv_addr,
    sizeof(serv_addr))==-1)
    error_handling("bind() error");


출처: 몽키몽키님의 네이버 블로그
Posted by euNey^0^

댓글을 달아 주세요

  1. BlogIcon sayheart 2013.01.10 15:25 신고 Address Modify/Delete Reply

    아니요. AF_INET을 사용해야 합니다.
    http://msdn.microsoft.com/en-us/library/ms740506(v=VS.85).aspx

    만약. 그것이 허용된다면. 2가 되는 모든 상수의 적용이 가능하게 됩니다.
    SOCK_DGRAM을 넣어도 됩니. 혼란스럽게 됩니다.

티스토리 툴바