Aktueller Standort: Startseite> Funktionskategorien> socket_set_nonblock

socket_set_nonblock

Setzen Sie den nicht blockierenden Modus für den Dateideskriptor FD
Name:socket_set_nonblock
Kategorie:Steckdosen
Programmiersprache:php
Kurzbeschreibung:Markieren Sie den angegebenen Socket als Nicht-Blocking-Modus, was bedeutet, dass der Prozess beim Lesen und Schreiben von Daten nicht blockiert wird

Funktionsname: Socket_set_nonblock ()

Anwendbare Version: Php 4> = 4.1.0, Php 5, Php 7

Verwendung: Socket_set_nonblock (Ressource $ Socket)

Funktionsbeschreibung: Die Funktion Socket_set_nonblock () markiert den angegebenen Socket als Nicht-Blocking-Modus, was bedeutet, dass der Prozess beim Lesen und Schreiben von Daten nicht blockiert.

Parameter:

  • $ Socket: Erforderlich, Socket-Ressource für den nicht blockierenden Modus eingestellt werden.

Rückgabewert: Return true on Success und falsch beim Scheitern.

Beispiel:

 <?php // 创建套接字$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); // 设置套接字为非阻塞模式if (socket_set_nonblock($socket)) { echo "套接字设置为非阻塞模式成功!\n"; } else { echo "套接字设置为非阻塞模式失败!\n"; } // 连接到服务器if (socket_connect($socket, '127.0.0.1', 8080) === false) { // 非阻塞模式下,连接可能会立即返回失败$error = socket_last_error($socket); if ($error != SOCKET_EINPROGRESS && $error != SOCKET_EALREADY) { echo "连接服务器失败:" . socket_strerror($error) . "\n"; } else { echo "连接正在进行中...\n"; } } // 读取数据$data = socket_read($socket, 1024); if ($data === false) { // 非阻塞模式下,如果没有数据可读取,会立即返回false $error = socket_last_error($socket); if ($error != SOCKET_EAGAIN) { echo "读取数据失败:" . socket_strerror($error) . "\n"; } else { echo "没有可读取的数据。\n"; } } // 写入数据$message = "Hello, Server!"; if (socket_write($socket, $message, strlen($message)) === false) { // 非阻塞模式下,如果无法立即写入数据,会立即返回false $error = socket_last_error($socket); if ($error != SOCKET_EAGAIN) { echo "写入数据失败:" . socket_strerror($error) . "\n"; } else { echo "无法立即写入数据。\n"; } } // 关闭套接字socket_close($socket); ?>

Im obigen Beispiel erstellen wir zunächst einen Socket und verwenden dann die Funktion von Socket_Set_Nonblock (), um den Socket auf den nicht blockierenden Modus einzustellen. Als nächstes versuchen wir, eine Verbindung zum Server herzustellen. Wenn die Verbindung fehlschlägt, bestimmen wir, ob die Verbindung basierend auf dem Fehlercode in Arbeit ist. Dann versuchen wir, die Daten zu lesen. Wenn es keine lesbaren Daten gibt, werden wir beurteilen, ob auf dem Fehlercode keine Daten zu lesen sind. Schließlich versuchen wir, Daten zu schreiben. Wenn die Daten nicht sofort geschrieben werden können, werden wir beurteilen, ob sie nicht sofort basierend auf dem Fehlercode geschrieben werden können. Schließlich schließen wir den Sockel.

Beachten Sie, dass im Nicht-Blocking-Modus einige Operationen sofort zurückkehren können, anstatt das Warten zu blockieren. Daher müssen Sie die entsprechende Situation basierend auf dem Rückgabewert oder Fehlercode verarbeiten.

Ähnliche Funktionen
Beliebte Artikel