Herakles
Profifragensteller
Moin!
Um Daten zwischen zwei Rechner hin und her zu senden, kann man ja mehr-byte-ige Zahlen mittels htonl/htons in die Networkbyteorder konvertieren und umgekehrt mit ntohl/ntohs wieder zurückwandeln. Je nach Architektur sind diese Funktionen dann Dummys oder eben "echte" Byte-Dreher.
Nun habe ich soeben bemerkt, dass in der Implementation beide Funktionen dasselbe tun:
So, jetzt erzählt mir mal, wieso gibt es denn wohl ZWEI Funktionen? Hat das einen historischen Grund? Oder hat da jemand zwei Funktionen verkaufen können und doppelt Geld kassiert? Wieso gibt es nicht einfach eine "convert_between_network_and_host(uint32_t)" bzw. "convert_between_network_and_host(uint16_t)"?
Ich bin gerade etwas verwirrt. Vielleicht sehe ich auch vor lauter Bäumen den Wald nicht...
Grüße
Herakles
Um Daten zwischen zwei Rechner hin und her zu senden, kann man ja mehr-byte-ige Zahlen mittels htonl/htons in die Networkbyteorder konvertieren und umgekehrt mit ntohl/ntohs wieder zurückwandeln. Je nach Architektur sind diese Funktionen dann Dummys oder eben "echte" Byte-Dreher.
Nun habe ich soeben bemerkt, dass in der Implementation beide Funktionen dasselbe tun:
Code:
u32_t
htonl(u32_t n)
{
return ((n & 0xff) << 24) |
((n & 0xff00) << 8) |
((n & 0xff0000UL) >> 8) |
((n & 0xff000000UL) >> 24);
}
u32_t
ntohl(u32_t n)
{
return htonl(n);
}
So, jetzt erzählt mir mal, wieso gibt es denn wohl ZWEI Funktionen? Hat das einen historischen Grund? Oder hat da jemand zwei Funktionen verkaufen können und doppelt Geld kassiert? Wieso gibt es nicht einfach eine "convert_between_network_and_host(uint32_t)" bzw. "convert_between_network_and_host(uint16_t)"?
Ich bin gerade etwas verwirrt. Vielleicht sehe ich auch vor lauter Bäumen den Wald nicht...
Grüße
Herakles