?? TCP/IP UDP oder TCP ??
-
Hallo,
habe hier einen Ausschnitt eines Codes aus einer Klasse, die ich verwenden muß.
Das Socket wird in dem Code mit SOCK_STREAM, also TCP angelegt, dem stuct addrinfo wird als SockType SOCK_DGRAM (UDP) zugewiesen.m_SockFd = socket ( AF_INET, SOCK_STREAM, 0 ); if ( m_SockFd != -1 ) { struct addrinfo hints, *res; bzero (&hints, sizeof (struct addrinfo)); hints.ai_family = AF_INET; // preferred connection hints.ai_socktype = SOCK_DGRAM; // for udp ... ... }
Welche Zuweisung gilt jetzt? Ist das jetzt eine TCP oder ein UDP Socket?
Danke.
Gruß
dziuba
-
hi dziuba,
m_SockFd = socket ( AF_INET, SOCK_STREAM, 0 ); if ( m_SockFd != -1 ) { struct addrinfo hints, *res; bzero (&hints, sizeof (struct addrinfo)); hints.ai_family = AF_INET; // preferred connection hints.ai_socktype = SOCK_DGRAM; // the way the socket will transport the data hints.ai_protocol = IPPROTO_UDP; // use udp protocol ... ... }
So kannst du sicher sein das UDP verwendet wird. Für TCP ist es:
m_SockFd = socket ( AF_INET, SOCK_STREAM, 0 ); if ( m_SockFd != -1 ) { struct addrinfo hints, *res; bzero (&hints, sizeof (struct addrinfo)); hints.ai_family = AF_INET; // preferred connection hints.ai_socktype = SOCK_STREAM; // the way the socket will transport the data hints.ai_protocol = IPPROTO_TCP; // use tcp protocol ... ... }
- loco
-
Gut. Du setzt in deiner Struktur irgendwelche Werte ein. Aber wie assoziierst du die Struktur mit deinem Socket?!
-
Also, zunächst zählt erstmaldass, was man bei "socket(...)" gesagt hat - natürlich sollte man dies dann auch in dem Struct so verwenden, damit man nicht andere Entwickler verwirrt, wie hier mit <dziuba> geschehen - oder man löscht noch besser diese Zeile direkt.
Dann habe ich aber selber noch ein Frage. Warum verwendet ihr eigentlich "struct addrinfo"? Sowohl "bind" als auch "connect" verlangen "struct sockaddr" bzw. eine erweiterung davon. Für IP ist dies doch "struct sockaddr_in", dies verwende ich jedenfalls immer und es funktioniert wunderbar. Dort trage ich dann im Fall eines Servers (bind) folgendes in die Struktur:
hints.sin_family = AF_INET;
hints.sin_port = <Portnummer auf der ich lauschen will>;
hints.sin_addr.s_addr = INADDR_ANY; // falls ich dies nicht weiter einschränkenwillUnd bei einem Client (connect) mache ich quasi das selbe, bis auf die letzte Zeile:
hints.sin_family = AF_INET;
hints.sin_port = <Portnummer, an die meine Anfrage gerichtet ist>;
hints.sin_addr.s_addr = <IP-Adresse, zu der ich Kontakt aufnehmen will>Was kann denn "struct addrinfo"? Habe ich etwa bisher immer etwas falsch gemacht?