TCP+UDP socket

05/02/2012 10:30 Tyrar#1
ich müsste ein serversocket für tcp UND udp haben, der client sendet ein server check packet (udp), aber das eigentliche protkoll basiert auf tcp!

jemand ne idee wie ich so ein socket konfigurieren müsste, bzw. welchen socket typ ich nehmen müsste?
05/02/2012 14:57 Nightblizard#2
Das klingt ziemlich ungesund, wozu brauchst du denn sowas?

Aber ich denke du suchst nach IPPROTO_RAW. Habe ich selber nie getestet (deshalb kann ich dir hier auch nicht wirklich helfen), aber rein vom lesen her hast du damit direkten Zugriff bis zum IP-Header.
05/02/2012 15:00 Tyrar#3
Quote:
Originally Posted by Nightblizard View Post
Das klingt ziemlich ungesund, wozu brauchst du denn sowas?

Aber ich denke du suchst nach IPPROTO_RAW. Habe ich selber nie getestet (deshalb kann ich dir hier auch nicht wirklich helfen), aber rein vom lesen her hast du damit direkten Zugriff bis zum IP-Header.
nunja, wenn ich einen voll funktionsfähigen emulator haben will muss da auch das query packet ankommen bzw. zurück gesendet werden ;)

IPPROTO_RAW scheint aber interessant zu sein, ich werds mir mal anschauen :)
05/04/2012 15:07 mydoom#4
Kannst du nicht einfach zwei Sockets verwenden? Nimm ein TCP-Socket und ein UDP-Socket (beispielsweise auf Port 13337) und arbeite dann dein Protokoll ab.
05/04/2012 15:58 qkuh#5
Seit wann kann man Ports doppelt belegen? Wär mir neu :D
05/04/2012 16:15 Ende!#6
Quote:
Originally Posted by qkuh View Post
Seit wann kann man Ports doppelt belegen? Wär mir neu :D
Wenn man mit Raw-Socks arbeitet, also anstatt wie üblich auf Layer 4 (Transport) auf Layer 3 (Network) des OSI-Modells, ist es durchaus möglich Ports "doppelt zu belegen" (mit unterschiedlichen Transport-Protokollen), weil die Routinen, die unterschiedliche Protokolle unterschiedlich behandeln und dem bei der Verwendung gewöhnlicher Sockets im Wege stehen, ja von dir als Entwickler implementiert werden. Mir stellt sich allerdings die Frage weshalb jemand das wollen würde - warum nicht einfach zwei Ports verwenden, wie es jeder normale Mensch auch tut? (Post #3 überlesen)

Im Übrigen ist anzumerken, dass Raw-Socks AFAIK administrative Rechte erfordern.
05/04/2012 18:02 Tyrar#7
Quote:
Originally Posted by Ende! View Post
Wenn man mit Raw-Socks arbeitet, also anstatt wie üblich auf Layer 4 (Transport) auf Layer 3 (Network) des OSI-Modells, ist es durchaus möglich Ports "doppelt zu belegen" (mit unterschiedlichen Transport-Protokollen), weil die Routinen, die unterschiedliche Protokolle unterschiedlich behandeln und dem bei der Verwendung gewöhnlicher Sockets im Wege stehen, ja von dir als Entwickler implementiert werden. Mir stellt sich allerdings die Frage weshalb jemand das wollen würde - warum nicht einfach zwei Ports verwenden, wie es jeder normale Mensch auch tut? (Post #3 überlesen)

Im Übrigen ist anzumerken, dass Raw-Socks AFAIK administrative Rechte erfordern.
durch raw sockets wirds einfach nur noch etwas komplizierter als ich vor hatte :)

hätte zu anfang eher daran gedacht, einfach 2 sockets zu erstellen (1 tcp, 1 udp), mit recvfrom (nonblocking) versuchen daten zu empfangen.
anschließend der ganze tcp kram mit select,recv,accept usw.

schreib ich mir wohl besser direkt ne socket lib. ich denke, dass ich das noch öfter gebrauchen könnte

btw. admin rechte benötige ich sowieso :)