Welchen Socket-Typ für AF_UNIX Sockets
-
Hallo!
Ich überlege gerade, welchen Socket Typen (SOCK_DGRAM oder SOCK_STREAM) ich für meine AF_UNIX Socket-Anwendung verwenden soll. Was genau ist der Unterschied? Ich kenne zwar den Unterschied zwischen TCP und UDP, und ich weiß auch das STREAM bei TCP und DGRAM bei UDP Anwendung findet, aber was hat das ganze jetzt mit Unix-Sockets zu tun? Heißt dass etwa ich habe bei Verwendung von SOCK_STREAM denselben Overhead wie bei TCP auf localhost und bei SOCK_DGRAM denselben wie bei UDP? Naja, im Prinzip würde ja DGRAm reichen wenn ich eh nur kleine Mengen an Daten verschicke und es IMHO nicht möglich ist dass Daten bei AF_UNIX Sockets verloren gehen können (wie UDP-Pakete in den unendlichen Weiten des Internets!)
Was meint Ihr dazu?
Viele Grüße
Andreas
-
Richtig: der Socket Typ sagt dir, ob Dein Socket TCP, oder UDP verwendet ...
Falsch:IMHO nicht möglich ist dass Daten bei AF_UNIX Sockets verloren gehen
Benutzt du SOCK_DGRAM kann es passieren, das deine gesendeten packete beim empfaenger nicht ankommen, wie es aben bei UDP so ist. ausserdem ist die reihenfolge der Daten packetweise nicht gewaehrleistet. Sprich du verschickst 1 MB an daten, dann kann am anderen ende die daten in Blockgreosse (zum beispiel 1492 byte) verwuerfelt sein .... Benutzt du UDP, muss dich halt um die Integritaet selber kuemmern, aufpassen das alle strukturen konsistent und eindeutig sind, und nicht durch die Verweurflung durcheinanderkommen, und fehlener werte evtl. interpolieren oder die Werte wieder neu anfordern.
TCP nimmt dir das natuerlich ab, da ist Eingangs-Datenstrom = Ausgangs-Datenstrom ... bis die Application abstuerzt, oder du den timeout abfaengst
Ciao ...
-
RHBaum: Er redet von Unix-Domain-Sockets, das hat mit TCP und UDP überhaupt nichts zu tun.
Zur Frage: IMHO müßte ein Datagram-Socket mit AF_UNIX verlässlich sein, da die typischen Fehlerquellen einfach wegfallen ... aber ich würd wahrscheinlich trotzdem einen Stream-Socket nehmen. Da gibts es keinen "TCP-Overhead", der funktioniert eigentlich wie eine Pipe, soweit ich weiß.