IPV4 및 IPV6을 지원하는 듀얼 스택 모드를 구현 중입니다. IPV6 소켓을 생성하고 수신하는 경우 IPv4 소켓과의 연결도 수락합니까?IPV6 소켓 생성
답변
운영 체제가 달리 구성되어 있지 않으면 예. Linux에서 net.ipv6.bindv6only=1
을 입력하거나 IPV6_V6ONLY
소켓 옵션을 설정합니다.
시스템에 dual-stack 구현이있는 경우에만. 대부분의 최신 시스템이 그렇지만 Windows와 OpenBSD의 구버전은 그렇지 않습니다. 당신은 이것에 의지해서는 안됩니다. IPV6_V6ONLY 소켓 옵션의 값을 가져오고, 0 일 경우 IPv4 용 두 번째 소켓을 열어야합니다.
이중 스택 소켓을 사용하는 경우 IPv4 주소는 ::ffff:[IPv4 address]
으로 표시됩니다. 예 : ::ffff:127.0.0.1
(이것은 ::ffff:7f00:1
에 해당하며 일반적으로 읽을 수있는 점은 10 진수로 표기됩니다).
@spencercw ...하지만 ipv6 소켓에서 연결을 만들고 받아들이는 동안 우리는 sockaddr_in6 구조와 크기를 전달해야합니다. 그래서, 그것은 변화를 가져 오지 않을 것입니다. 그리고 IPV6_V6ONLY 값을 설정하는 방법. 코드에서 이해하는 방법을 설명해 주시겠습니까? 이것을 setsocketoption에 전달해야합니까 ?? –
IPv6 전용 옵션을 변경하지 않으려 고합니다. 사용 가능한 경우 이중 스택 기능을 사용하십시오. 이중 스택 기능이없는 경우에만 IPv4 용 두 번째 소켓을 엽니 다. 옵션의 가치를 얻으려면 [getsockopt()] (http://linux.die.net/man/3/getsockopt)를 사용해야합니다. – spencercw
는 Microsoft에 의하면, 듀얼 스택 모드에서 기본값은 false로 IPV6_V6ONLY 세트를 가지고하는 것입니다 -하지만 당신은 setsockopt를 (2) 호출을 통해 활성화 할 수 있습니다. FWIW, Windows의 "이전 버전"(단일 스택)에는 여전히 널리 사용되는 Windows XP (Vista 이전)가 포함됩니다.
Windows를 사용하는 경우 IPV6_V6ONLY를 비활성화하고 사용 중지되었는지 확인해야합니다. 다른 싱글 스택 구현을위한 좋은 대답인지 아닌지는 잘 모르겠습니다.
- 1. IPv6 소켓 프로그램 문제
- 2. IPV6 소켓 프로그램을 실행하기위한 사양
- 3. FreeBSD에서의 IPv6 네트워크 성능
- 4. ipv6 응용 프로그램 테스트
- 5. 동일한 소켓 생성 중
- 6. C 소켓 API를 사용하여 모든 IPV6 주소를 수신하는 방법
- 7. WCF IPv6 끝점
- 8. 이상한 네트워크 소켓 누출
- 9. IPv6 샘플 데이터?
- 10. 리눅스에서 인터페이스의 IPv6 주소를 얻는 방법
- 11. IPv6 사용 통계
- 12. 한다 getaddrinfo 및 IPv6
- 13. ipv6 이전의 부작용
- 14. 내가 IPv6 주소 문자열을
- 15. SNMP 트랩이 IPv6 주소로
- 16. NAT 통과 및 IPv6
- 17. Gethostname 및 IPv6
- 18. IPV6 사용률 연구
- 19. IPv6 주소 대체 gethostbyname
- 20. InetAddress.getHostAddress() ipv6 compliant?
- 21. IPv6 및 SoapTcpTransport.GetInputChannel (WSE)
- 22. Jetty에서 IPv6 주소로 바인딩
- 23. 소켓 생성/getsockname을 통한 로컬 IP 찾기
- 24. ACTION_ACL_CONNECTED 후 블루투스 장치로 소켓 연결 생성
- 25. 자바 : 소켓 대 소켓
- 26. IPv6 영역 색인 및 scope_id
- 27. JCIFS 클라이언트에 IPv6 지원 추가
- 28. IPv6 문자열을 바이트 + 파이썬으로 변환
- 29. PHP ipv6 사용 안 함
- 30. asp.net 응용 프로그램 IPv6 만들기
.NET에서 명시 적으로'SocketOptionName.IPv6Only'을'false'로 설정해야한다는 것을 눈치 챘습니다. 그렇지 않으면 IPv6 소켓에서 IPv4 연결을 수락하지 않을 것입니다. 예 :'listener_socket.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionLevel.IPv6, SocketOptionName.IPv6Only, false);' –