[C++] Dualstack IPv4 / IPv6

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 19:30
Ik ben bezig met een test applicatie waarbij ik sockets in c++ gebruik. Ik gebruik UDP (ik weet dat dit geen garanties geeft voor berichtvolgorde en of berichten uberhaupt aankomen...). Ik had al een werkende applicatie, maar nu wil ik deze IPv6 compatible maken. Daarom heb ik een server en een client applicatie geschreven om te testen hoe dit werkt. Ik kan dit alleen op localhost testen, doordat mijn intern netwerk (en mijn internet) allebei IPv4 is. Op localhost werkt deze in ieder geval.

De werkende client is hier te vinden en de werkende server hier.

Ik wil tegelijk IPv4 als IPv6 kunnen laten werken. Dit is mogelijk want sinds vista, kunnen de sockets in windows in dual stack modus werken. Toch lukt het me niet om IPv4 packets te ontvangen of te verzenden.

Voor de server zou ik naar mijn idee niets hoeven te veranderen, aangezien de ip's als ik het goed hebben binnenkomen als een IPv4 mapped IPv6 adres. Toch ontvang ik niets. Ik verwacht dat het probleem in de client zit, maar ook met een andere test applicatie, waarvan ik weet dat hij werkt, die gewoon IPv4 packets verzend, ontvangt de server geen packets.

Bij de client heb ik geprobeerd om alleen het adres te wijzigen van "::1" naar "::FFFF:127.0.0.1", maar dit lijkt niet te werken. Hij geeft aan dat verzenden gelukt is. De server ontvangt niets, maar dit kan aan de server liggen. Echter wanneer ik mijn lokaal netwerkadres van deze computer (10.200.8.2) gebruik zodat hij via de netwerkkaart gaat (zodat ik wireshark kan gebruiken), zie ik ook niets in wireshark. Wanneer ik die oudere test applicatie met alleen IPv4 gebruik, zie ik dit wel.

Ik heb ook nog met verschillende combinaties van de familytype zitten proberen bij het verzenden. Soms geeft dit hetzelde als nu, andere combinaties zorgden voor een error bij het verzenden.

Weet iemand hoe ik dit kan oplossen, of is hetgeen ik probeer toch niet mogelijk en begrijp ik de werking van dual stack sockets niet goed? Alvast bedankt!

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:50
Volgens mij zet je op regel 20 de IPV6_V6ONLY flag juist aan, want ASCII character '0' is 48 en dat is nonzero.

Sowieso moet dat volgens de documentatie een DWORD zijn, geen char. Probeer dus eens DWORD option = 0; in plaats van char option = '0';.

Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 19:30
Heel erg bedankt. Nu heb ik het werkend. Zowel het zenden als het ontvangen werkt nu :D
Ik heb eerst niet goed gekeken naar het type doordat de functie een char* vraagt, maar dit is omdat je verschillende typen nodig kan hebben voor verschillende opties. Doordat ik hier niet op heb gelet, heb ik gewoon die char gepakt, en heb ik er daarna de hele tijd overheen gekeken. Vooral ook doordat die functie geen error geeft omdat het een geldige waarde is.

Heel erg bedankt _/-\o_

Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:50
Mja, soms zit je zo lang naar je code te staren dat je de simpelste dingen over het hoofd ziet.

Grappig trouwens dat we het laatst over hybrid IPv4/IPv6 sockets hadden in de coffee corner; toen claimde .oisyn dat die niet werken onder Windows maar blijkbaar sinds Windows Vista/Server 2008 wel. (Nu moet ik niet veel zeggen want ik draai zelf ook nog gewoon Windows XP, maar ik neem aan dat de meer die-hard Windows-gebruikers toch wel op Windows 7 zitten tegenwoordig).

Acties:
  • 0 Henk 'm!

  • Robbiedobbie
  • Registratie: Augustus 2009
  • Laatst online: 19:30
Haha ja, ik heb er inderdaad een hele lange tijd naar zitten staren :p

En in de coffeecorner was ik de oorzaak van die discussie. Ik was bezig dat ik me daar maar eens in moest gaan verdiepen, en vroeg of iemand nog goede artikels had.
Ik ga bij nieuwe software geen rekening meer houden met Windows xp. Microsoft gaat het ook niet meer ondersteunen, dus wordt het tijd om over te stappen. Ik schrijf nu sommige software cross-platform, zo ook dit stukje code, en dual sockets worden nu door bijna alle moderne systemen ondersteunt. Dit is ook wel nodig, aangezien we nog dit jaar langzaam over zullen moeten gaan op ipv6. Het duurt niet lang voordat er mensen zijn die alleen nog maar ipv6 hebben. Dan moet de software er wel mee overweg kunnen ;)

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 20:52

.oisyn

Moderator Devschuur®

Demotivational Speaker

Soultaker schreef op zaterdag 26 mei 2012 @ 22:30:
toen claimde .oisyn dat die niet werken onder Windows maar blijkbaar sinds Windows Vista/Server 2008 wel.
Ik heb niets van zulks geclaimd, dat was iemand anders :). Dat nam ik verder voor waar aan voor de rest van de discussie.

.edit: die persoon was jij zelf 8)7

[ Voor 15% gewijzigd door .oisyn op 28-05-2012 21:52 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 18:50
Fair enough. Mijn kennis was achterhaald. (Hoewel ik 't jou hoorde bevestigen.) Ik ben waarschijnlijk niet de beste persoon om na te praten als het over recente ontwikkelingen in Microsoft/Windows-land gaat. Maar ik zal proberen m'n uitspraken beter te factchecken in het vervolg.

In ieder geval weet ik nu wel hoe het zit, dus dit topic heeft voor mij toch nog enig nut gehad.
Pagina: 1