[C++] UDP sendfrom/recvto?

Pagina: 1
Acties:

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Ik heb een server geschreven die via UDP benaderd kan worden. Maar op systemen met meerdere IP adressen gaat dit af en toe fout.
Een cliënt verstuurt een packet naar IPA0, maar de server verstuurt een packet vanaf IPA1. De cliënt dropped dit packet dan.
Is het ook mogelijk per packet aan te geven vanaf welk IP adres dit verstuurd moet worden (iets als sendfromto)?
En om uit te vinden naar welk IP adres een ontvangen packet verstuurd was (recvfromto)?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 25-05 20:56
Je verstuurt je messages toch ook 'vanaf' een socket, dat gebonden is aan een bepaald adres? Ik ging er altijd vanuit dat dat adres dan ook als afzender in de IP header zou komen. Blijkbaar is dat in jouw geval niet zo. Onder welke besturingssysteem werk je?

Eventueel kun je als workaround geen sendto gebruiken maar sendmsg. Je kunt dan zelf de UDP header erin prutsen, maar da's wel een hoop gedoe.

edit:
Misschien gebruik je een ongebonden socket? In dat geval kan ik me voorstellen dat je besturingssysteem zelf een afzenderadres gaat verzinnen en dan is dat op te lossen door een gebonden socket te gebruiken (die heb je al, want je ontvangt er ook al berichten op).

[ Voor 28% gewijzigd door Soultaker op 22-05-2004 18:06 ]


  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
De server bind de socket aan *:2710. Daar worden packets mee ontvangen en verstuurd. Maar dat gaat dus niet goed.
Binden aan een IP adres zou kunnen, maar dan ontvang ik op andere IP adressen geen packets meer. Dan zou ik per IP adres een socket kunnen binden, maar dan gaat er weer iets fout als er een IP adres bijkomt of verandert.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 25-05 20:56
(Hmm, weet je zeker dat als er nieuwe IP adressen bijkomen, dat je bestaande socket daar dan ook opeens aan gebonden is?)

Ergens vraag je er natuurlijk een beetje om; als je niet aangeeft op een specifiek adres te willen binden dan is dat feitelijk irrelevant. Het is dan vooral een beetje 'lastig doen' van de client om het pakket te droppen alleen maar omdat 'ie niet van de verwachte bron komt (maar ok, dat hangt er natuurlijk een beetje vanaf hoe het protocol boven UDP eruit ziet).

Misschien dat er een platformafhankelijke manier is om dit te configureren, anders zou ik het ook niet weten.

  • Olaf van der Spek
  • Registratie: September 2000
  • Niet online
Soultaker schreef op 22 mei 2004 @ 18:29:
(Hmm, weet je zeker dat als er nieuwe IP adressen bijkomen, dat je bestaande socket daar dan ook opeens aan gebonden is?)
De bestaande socket is niet gebonden aan een bepaald IP adres. Ik verwacht inderdaad dat als er later een nieuw IP adres bijkomt, mijn socket daar ook packets van kan ontvangen.
Ergens vraag je er natuurlijk een beetje om; als je niet aangeeft op een specifiek adres te willen binden dan is dat feitelijk irrelevant. Het is dan vooral een beetje 'lastig doen' van de client om het pakket te droppen alleen maar omdat 'ie niet van de verwachte bron komt (maar ok, dat hangt er natuurlijk een beetje vanaf hoe het protocol boven UDP eruit ziet).

Misschien dat er een platformafhankelijke manier is om dit te configureren, anders zou ik het ook niet weten.
Dat is inderdaad ook een optie, maar qua security lijkt me dat niet handig.
Ik snap niet waarom er geen recvfromto en sendfromto zijn.

sendmsg lijkt op Windows niet te bestaan en op Linux toch niet te doen wat ik wil.

[ Voor 5% gewijzigd door Olaf van der Spek op 22-05-2004 18:53 ]