관리 메뉴

드럼치는 프로그래머

[TCP/IP] PF_INET과 AF_INET 비교 본문

★─Programing/☆─TCP IP

[TCP/IP] PF_INET과 AF_INET 비교

드럼치는한동이 2008. 12. 12. 00:02

소켓 프로그래밍 하다보면 AF_INET을 쓰는데가 있고, PF_INET을 쓰는데가 있다.

이에 이 두 개념에 대한 내용을 정리해 보고자 한다.

다음의 코드를 살펴보자. 

 

servSock = socket( PF_INET, SOCK_STREAM, IPPROTO_TCP );

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

 

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

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

 

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

 

다음으로 서버의 주소를 지정하고 bind 시켰습니다.
memset( &echoServAddr, 0, sizeof( echoServAddr ) );

echoServAddr.sin_family = AF_INET;

echoServAddr.sin_addr.s_addr = htonl( INADDR_ANY );

echoServAddr.sin_port = htons( echoServPort );

if( bind( servSock, ( struct sockaddr * ) &echoServAddr, sizeof( echoServAddr ) ) < 0 ){           

     printf( "bind() failed" );       

     exit( 1 );

}


Comments