Vielleicht am Serverterminal ist die Anzahl der aktuellen eingehenden Anforderungen begrenzt. Wenn die eingehenden Clientanrufe schneller ankommen, kann der Server Daten verarbeiten, die Warteschlange wird möglicherweise überladen, und zukünftige eingehende Anfragen werden durch eine Ausnahme von Econnrefused abgelehnt. Die Größe dieser Warteschlange wird als Parameter für die Hörmethode bereitgestellt. Das Setup wird jedoch seine eingebaute Begrenzung für die Paketgröße berufen.
Mit Paketanschlussprotokollen (SOCK_STREAM, SOCK_SEQPACKET), verwenden Sie die Methode Accept (). Es akzeptiert das erste Anfragepaket für den empfangenden Port Sockfd aus der Warteschlange der eingehenden Anforderungen, legt einen neuen zugeordneten Port ein und bietet eine neue bestimmte Datei für den Anschluss. Die frisch gebildete Verbindung ist nicht so konfiguriert, dass sie zuhört. Diese Funktion wirkt sich nicht auf den primären terminalen Sockfd aus.
Syntax der Socket Akzeptieren Sie die Funktion in der C -Sprache
# int Accept (int sockfd, struct sockaddr *addr, socklen_t *addrlen)
Die Funktion accept () enthält unterschiedliche Parameter, die Sockfd, *addr und *addrlen enthalten. Das Folgende sind die Einzelheiten dieser Argumente:
Der Parameter „SockfD“ ist ein Port, der mithilfe einer Socket entwickelt wurde, die durch BIND mit einer physischen Adresse verbunden ist. Aber es wartet auch nach Einträgen nach einem Zuhören.
Der Parameter "ADDR" ist ein "Sockaddr" -Konfigurationszeiger. Der Standort des Peer -Ports wird durch die Netzwerkebene bestimmt und in dieses Element übergeben. Die IP -Klasse des Sockets gibt die optimale Syntax der IP an, die vom „ADDR“ bereitgestellt wird. Nichts würde eingeladen, wenn der Parameter „ADDR“ null wird; "Addrlen" wurde in dieser Situation noch nie verwendet und muss auch null sein.
Der Parameter „Addrlen“ ist ein Bewertungsparameter: Der Empfänger kann ihn mit der Dimension der Struktur konfigurieren, auf die der Parameter „ADDR“ bezeichnet wird, und würde die ursprüngliche Größe des Referenzports liefern. Wenn der angegebene Cache zu begrenzt ist, wird der abgerufene Wert abgeschnitten. In dieser Situation erzeugt der Parameter „Addrlen“ einen Ausgang, der erheblich größer ist als der Wert der Funktion.
Die Funktion Accept () enthält den Client, es sei denn. Die Funktion ACCEPT () erscheint mit dem Ausnahmegebiet oder Ewouldblock, wenn das Setup nicht blockiert ist und es keine Warteanforderungen in der Warteschlange gibt.
Beispiel für die Socket Accept () -Funktion in C -Sprache in Ubuntu 20.04
Wir werden das Programm schreiben, das zeigt, dass die Funktion Accept () den Anruf verzögert.
Zunächst importieren wir einige erforderliche Header -Dateien. Die Bibliothek umfasst die Verwendung von Standardeingangs- und Ausgangsmethoden. Zeigt verschiedene Kategorien von Symbolen und Frameworks an, befasst sich mit den Funktionen von Socket. Geben Sie dann die symbolisierte Variable an, die als Zielknoten in den der Funktion angegebenen Frameworks angewendet wird, und befasst sich mit den verschiedenen Funktionen der Zeichenfolge. Als nächstes definieren wir Backlog 3. Es enthält alle wichtigen Faktoren, die zur Herstellung des integrierten Designs erforderlich sind.
Hier nennen wir die main () -Funktion. Innerhalb des Körpers der Main () -Funktion initialisieren wir einige Variablen, die in diesem Programm verwendet werden. Wir deklarieren den strukturellen Zeiger der Variablen "Sockaddr_in my_addr". Zum Erstellen einer Socket verwenden wir die Socket () -Methode. Zusätzlich haben wir mit Hilfe der Bind () -Funktion gebunden. Und weisen Sie der Variablen „B“ den Wert der Funktion Bind () zu "B" zu. Die Methode Bind () enthält unterschiedliche Argumente. Wir haben in diesem Fall eine verschachtelte IF-ELSE-Erkrankung verwendet. Zunächst definieren wir den Zustand der Erklärung "if". Wenn der Wert der Variablen „B“ größer als 0 ist, druckt die FRINGF () -Funktion den Text „erfolgreich gebeten“.
Andernfalls stoppt die Funktion printf () die Ausführung des Programms, indem die Meldung „Bindungsfehler“ angezeigt wird. Zu Hörzwecken wird die Funktion Hören () aufgerufen. Wir werden eine Variable „L“ initialisieren, um den Wert von Hören () zu speichern, die die Funktion von Hören () speichern. Die Funktion Hören () enthält zwei Parameter. Jetzt wenden wir die Bedingung auf den Wert des Hörens an, wenn der Wert von „L“ größer als 0 ist. Die printf () -Methode wird aufgerufen, um die Nachricht „Hören“ anzuzeigen. Die Funktion printf () zeigt „nicht zuhören“, wenn die bestimmte Bedingung nicht erfüllt ist.
Um Systemanfragen zu akzeptieren, haben wir die Funktion Accept () verwendet. Noch einmal für diese Funktion werden wir den IF-ELSE-Zustand verwenden. Der Wert der Funktion Accept () wird in der Variablen „ACC“ gespeichert. Wenn der Wert der Variablen „ACC“ größer als 0 ist, nennen wir die printf () -Methode, um die Zeile „akzeptiert“ zu drucken. Andernfalls rufen wir die printf () -Antage an, um "nicht akzeptiert" zu drucken. Auf diese Weise werden wir den Code beenden.
Wir erhalten diese Art von Ausgabe, nachdem wir den vorherigen Code ausgeführt haben.
Abschluss
Wir haben den Socket Accept 2 C -Funktion in diesem Artikel eingehend eingeschlossen. Die Funktion Accept () wird aufgerufen, um die Systemanfragen zu akzeptieren. Wir müssen verschiedene Bibliotheken importieren, bevor wir die Funktion Accept () verwenden. Diese Funktion hält Parameter für verschiedene Funktionen verantwortlich. Die Systemaufrufe bieten eine bestimmte Dateikennung für den empfangenen Port, wenn sie erfolgreich ausgeführt werden. Bei Fehler zeigt der Code jedoch die Ausnahme durch Drucken -1. Wenn eine Netzwerkverbindung angefordert wird, wird ein zugängliches Signal gesendet, und Benutzer verwenden dann Accept (), um einen Port für diese Art von Verbindung zu erhalten.