2016-12-22 5 views
0
내가 IPv4와 IPv6 모두에 걸쳐 동일한 포트를 수신 대기 gsoap 서버를 구현하기 위해 노력하고

모두 이상 제공하지 않습니다,하지만 난 -DWITH_IPV6 -DWITH_NO_IPV6_V6ONLY 매크로 정의와 gsoap를 컴파일하지만 그것은 tcp6로 "netstat -l"명령에 표시되지 않습니다 "netstat -l"명령에 tcp 서버가 대기 중입니다. -DWITH_IPV6 -DWITH_IPV6_V6ONLY 매크로를 사용하여 코드를 컴파일하면 Ipv6에서만 작동하며 "netstat -l"응답에는 tcp6 리스닝 서버가 있습니다. gsoap IPv4 및 IPv6

내가 the code를 디버깅

나는 soap_bind 기능 getaddrinfo을 통해 ai_family = PF_UNSPEC를 통과하는 것을보고, 그리고 반환되는 addrinfo 데이터의 ai_next를 사용하지 않습니다. addrinfo.ai_family를 AF_INET으로 설정하고, addrinfo.ai_next-> ai_family를 AF_INET6으로 설정하고 addrinfo.ai_next을 사용하지 않습니다.

gsoap 소스 코드와 함께/아웃을 성공시킬 수있는 방법이 있습니까?

답변

0

내가 연구 한 한 gsoap을 사용하여 AF_INET과 AF_INET6 두 주소 패밀리를 바인딩하고 수신 대기 할 수있는 방법은 없습니다. 내 주제를 달성하기 위해 수정 된 soap_bind 함수를 사용하여 두 개의 비누 개체와 다른 소켓 (하나는 ipv4, 다른 하나는 ipv6)을 바인딩했습니다.

0

정확하게 똑같은 문제를 발견했습니다.

밝혀졌습니다. 지원됩니다.

WITH_NO_IPV6_V6ONLY을 정의하십시오. (WITH_IPV6이 stdsoap2.h로 정의 됨)

그 결과 이중 스택 소켓을 허용하는 소켓의 옵션이 설정됩니다. 내가 볼 수있는 한, 시스템에 따라 기본값이 될 수 있습니다. Windows 환경이 아니기 때문에 듀얼 스택 지원을 위해서는 Vista 이상이 필요합니다.