2016-12-22 1 views
0

Je suis en train de mettre en œuvre un serveur gsoap qui écoute même port sur les deux ipv4 et ipv6, mais il ne ne figure pas dans la commande « netstat -l » comme tcp6 bien que je compilé gsoap avec -DWITH_IPV6 -DWITH_NO_IPV6_V6ONLY définitions macro La commande "netstat -l" a le serveur d'écoute tcp. Quand je compile le code avec des macros -DWITH_IPV6 -DWITH_IPV6_V6ONLY il fonctionne avec seulement Ipv6 et "netstat -l" réponse a le serveur d'écoute tcp6.gsoap ne sert pas à la fois sur ipv4 et ipv6

Quand je debug the code j'ai vu que soap_bind fonction passe par ai_family = PF_UNSPECgetaddrinfo, et il ne se sert pas de retour ai_next addrinfo données. addrinfo.ai_family défini sur AF_INET, addrinfo.ai_next-> ai_family défini sur AF_INET6 et n'utilise pas addrinfo.ai_next.

Y a-t-il un moyen de réussir cela avec/hors patch code source gsoap?

Répondre

0

Dans la mesure où je recherche il n'y a pas de moyen possible de lier et écouter sur deux famille d'adresses AF_INET et AF_INET6 en utilisant gsoap. Pour réaliser mon sujet, j'ai créé deux objets soap et je me suis lié sur différentes sockets (l'une est ipv4, l'autre est ipv6) en utilisant ma fonction soap_bind modifiée.

0

Juste rencontré ce même problème.

Il s'avère qu'il est pris en charge.

Définissez simplement WITH_NO_IPV6_V6ONLY. (Ce qui donne WITH_IPV6 en cours de définition stdsoap2.h)

Il en résulte la définition d'une option sur le socket qui permet une socket à double pile. Autant que je peux voir, selon le système qui peut être le défaut. Ce n'est pas sous Windows et vous aurez besoin de Vista ou plus pour le support de deux piles.