2016-08-06 26 views
0

Ich habe gerade begonnen, in Socket-Programmierung zu bekommen. Ich verstehe nicht, wie man Sockaddr_storage deklariert und dann einen Socket listen() macht, alle eingehenden Verbindungen werden automatisch in sockaddr_storage gespeichert. Was, wenn du 5 sockaddr_storage deklarierst?Wie genau funktioniert sockaddr_storage?

+0

See [diese Antwort] (http://stackoverflow.com/a/8842041/841108) auf eine ähnliche Frage –

+2

„Ich verstehe nicht, wie von nur erklärt sockaddr_storage und dann eine Steckdose machen listen(), die ganze eingehende Verbindungen werden nur automatisch in sockaddr_storage gespeichert. " - *** Das ist, weil sie nicht ***. – immibis

+1

Sie können sich die Argumente zu [accept() '] (http://pubs.opengroup.org/onlinepubs/7908799/xns/accept.html) näher ansehen. – dhke

Antwort

3

Wie genau funktioniert sockaddr_storage?

sockaddr_storage ist eine Art, die eine Socket-Adresse für jedes unterstützte Protokoll (sockaddr_in für IPv4, IPv6 für , sockaddr_un für UNIX-Domänen, sockaddr_bth für Bluetooth, usw.) zu halten, groß genug ist.

Ich verstehe nicht, wie durch nur deklarieren sockaddr_storage und dann ein Socket listen(), alle eingehenden Verbindungen nur automatisch in sockaddr_storage gespeichert werden.

Das ist, weil sie nicht tun. Sie haben eine sockaddr_storage an eine Funktion zu übergeben, die sie mit einem Socket-Adresse füllt, wie accept(), getsockname(), getpeername() usw.

Was passiert, wenn Sie 5 sockaddr_storage erklären?

Dann haben Sie 5 Variablen vom Typ sockaddr_storage. Nichts Besonderes passiert. Es ist das gleiche wie wenn Sie gefragt würden "Was ist, wenn Sie 5 Ints deklarieren?" Du musst sie immer noch irgendwie bevölkern.

+0

Seien Sie vorsichtig mit den Einschränkungen: Weil 'sockaddr_storage' [* groß genug sein muss, um alle unterstützten protokollspezifischen Adressstrukturen unterzubringen *] (http://pubs.opengroup.org/onlinepubs/009696699/basedefs/sys/socket. h.html). Welches ist z.B. warum 'sockaddr_un' begrenzt die maximale Pfadlänge. – dhke