現在の位置: ホーム> 関数カテゴリ一覧> socket_set_nonblock

socket_set_nonblock

ファイル記述子FDの非ブロッキングモードを設定します
名前:socket_set_nonblock
カテゴリ:ソケット
対応言語:php
一言説明:指定されたソケットを非ブロッキングモードとしてマークします。つまり、データの読み取りと書き込みのときにプロセスがブロックされないことを意味します

関数名:socket_set_nonblock()

該当するバージョン:PHP 4> = 4.1.0、PHP 5、PHP 7

使用法:socket_set_nonblock(リソース$ socket)

関数の説明:socket_set_nonblock()関数は、指定されたソケットを非ブロッキングモードとしてマークします。つまり、データの読み取りと書き込みの際にプロセスがブロックされません。

パラメーター:

  • $ socket:必須、ソケットリソースは非ブロッキングモードに設定されます。

返品値:成功の真のリターン、および失敗にfalseを返します。

例:

 <?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); ?>

上記の例では、最初にソケットを作成し、次にsocket_set_nonblock()関数を使用して、ソケットを非ブロッキングモードに設定します。次に、サーバーに接続しようとします。接続が失敗した場合、エラーコードに基づいて接続が進行中かどうかを判断します。次に、データを読み取ろうとします。読み取り可能なデータがない場合、エラーコードに基づいて読み取るデータがないかどうかを判断します。最後に、データを作成しようとします。データをすぐに記述できない場合、エラーコードに基づいてすぐに記述できないかどうかを判断します。最後に、ソケットを閉じます。

非ブロッキングモードでは、待機をブロックする代わりに、一部の操作がすぐに戻る場合があることに注意してください。したがって、返品値またはエラーコードに基づいて、対応する状況を処理する必要があります。

類似の関数
  • 別のプロセスからソケットをインポートします socket_wsaprotocol_info_import

    socket_wsaprotocol_info_import

    別のプロセスからソケットをインポートしま
  • 接続されたソケットにデータを送信します socket_send

    socket_send

    接続されたソケットにデータを送信します
  • socket_set_optionのエイリアス socket_setopt

    socket_setopt

    socket_set_optionのエイ
  • 接続されているかどうかにかかわらず、ソケットにメッセージを送信します socket_sendto

    socket_sendto

    接続されているかどうかにかかわらず、ソケ
  • 特定のソケットのローカルエンドをクエリします。このタイプに応じて、ホスト/ポートまたはUNIXファイルシステムパスになる可能性があります socket_getsockname

    socket_getsockname

    特定のソケットのローカルエンドをクエリし
  • 接続指向かどうかにかかわらず、ソケットからデータを受信する socket_recvfrom

    socket_recvfrom

    接続指向かどうかにかかわらず、ソケットか
  • カプセル化されたソケットのストリームにソケット拡張リソースをエクスポートします socket_export_stream

    socket_export_stream

    カプセル化されたソケットのストリームにソ
  • 名前をソケットにバインドします socket_bind

    socket_bind

    名前をソケットにバインドします
人気記事(にんききじ)