Post Lists

2018년 7월 13일 금요일

4. Jumping from IPv4 to IPv6

http://beej.us/guide/bgnet/html/multi/ip4to6.html

그러나 나는 IPv6와 함께 작동하기 위해, 내 코드에서 무엇을 바꿔야 할지를 알고 싶다.

거의 여기에 있는 모든 것이 내가 다룰 것이다. 그러나 성급한 사람에게는 짧은 버전이다. (물론, 이것보다 더 많은 것이 있지만, 이것이 가이드에 적용되는 것이다.)

1. 첫 번째로, 구조체를 직접 채우는 대신에, 구조체 sockaddr 정보를 얻기위해, getaddrinfo()를 사용하려고 해라. 이것은 너가 IP version에 상관없게 해줄 것이고, 많은 차후의 단계들을제거할 것이다.
2. IP 버전과 관련된 어떤 것을 하드코딩하고 있는 것을 발견하는 곳 어디서든, helper function으로 wrap up하려고 해라.
3. AF_INET을 AF_INET6로 변경해라.
4. PF_INET을 PF_INET6로 변경해라.
5. INADDR_ANY 할당을 in6addr_any 할당으로 바꾸어라. 이것은 조금 다르다:

struct sockaddr_in sa;
struct sockaddr_in6 sa6;

sa.sin_addr.s_addr = INADDR_ANY; // use my IPv4 address
sa6.sin6_addr = in6addr_any; // use my IPv6 address

또한, IN6ADDR_ANY_INIT 값은 struct in6_addr이 선언될 때, initializer로서 사용될 수 있다. 다음과 같이:

  struct in6_addr ia6 = IN6ADDR_ANY_INIT;

6. strut sockaddr_in 대신에, struct sockaddr_in6를 사용해라. 적절히 필드에 6을 추가하려고 해라. sin6_zero 필드는 없다.
7. struct in_addr 대신에, struct in6_addr를 사용해라. 적절히 필드에 6을 추가하려고 해라.
8. inet_aton() 또는 inet_addr() 대신에, inet_pton()을 사용해라.
9. inet_ntoa()대신에, inet_ntop()을 사용해라.
10. gethostbyname() 대신에, 더 좋은 getaddrinfo()를 사용해라.
11. gethostbyaddr() 대신에, 더 좋은 getnameinfo()를 사용해라. (비록 gethostbyaddr이 여전히 IPv6와 작동할지라도)
12. INADDR_BROADCAST는 더 이상 작동하지 않는다. 대신에 IPv6 multicast를 사용해라.

댓글 없음:

댓글 쓰기