socket_atmark

(PHP 8 >= 8.3.0, PHP 8)

socket_atmarkОпределяет, находится ли сокет на внеполосной отметке

Описание

function socket_atmark(Socket $socket): bool

Определяет, находится ли socket на внеполосной отметке.

Список параметров

socket

Экземпляр класса Socket, созданный функцией socket_create().

Возвращаемые значения

Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.

Примеры

Пример #1 Пример использования функции socket_atmark() для проверки, готов ли сокет к чтению внеполосных данных

<?php
$socketServer
= socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
socket_set_option( $socketServer, SOL_SOCKET, SO_REUSEADDR, 1 );
socket_bind( $socketServer, '127.0.0.1' );
socket_listen( $socketServer );

$socketClient = socket_create( AF_INET, SOCK_STREAM, SOL_TCP );
socket_getsockname( $socketServer, $stAddr, $uPort );
socket_connect( $socketClient, $stAddr, $uPort );

$socket = socket_accept( $socketServer );
socket_shutdown( $socket, 1 );

$st = 'This is normal data.';
socket_send( $socketClient, $st, strlen( $st ), 0 );
$st = '!'; # TCP допускает только один байт срочных данных.
socket_send( $socketClient, $st, strlen( $st ), MSG_OOB );
$st = 'Not so urgent.';
socket_send( $socketClient, $st, strlen( $st ), 0 );
socket_shutdown( $socketClient );

do {
if (
socket_atmark( $socket ) ) {
$rc = socket_recv( $socket, $st, 65536, MSG_OOB );
echo
"Получены срочные данные: ({$rc}) {$st}\n";
} else {
$rc = socket_recv( $socket, $st, 1024, 0 );
echo
"Получены обычные данные: ({$rc}) {$st}\n";
}
} while (
$rc > 0 );
socket_close( $socketServer );
socket_close( $socketClient );
socket_close( $socket );
?>

Результат выполнения приведённого примера:

Получены обычные данные: (20) This is normal data.
Получены срочные данные: (1) !
Получены обычные данные: (14) Not so urgent.
Получены обычные данные: (0)

Смотрите также

  • socket_connect() - Начинает соединение с сокетом
  • socket_create() - Создаёт сокет (конечную точку для обмена информацией)

Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top