По умолчанию выборка срочных данных TGP может осуществляться только путем вызова функции recv () с флажком MSG_OOB. В этом случае сама операционная система извлекает и сохраняет входящие срочные данные так, чтобы они не смешивались с обычным потоком данных, к примеру, с обзором планшета Билайн Таб .
Для того чтобы срочные данные оставались встроенными и появились среди обычных данных, можно применить опцию SO_OOBLINE, Эта опция может быть установлена С помощью метода sосkopt () модуля IO::Socket или с использованием встроенной функции setsockopt (). Сокеты, в которых установлена эта опция, возвращают срочные данные, встроенные в общий поток данных. Сигнал URG отправляется по-прежнему, но вызов функции recv () с флажком MSG_OOВ больше не может применять гм для выборки срочных данных и даже приводит к активизации ошибки EINVAL.
Опция SO_OOBLINE действует только на той стороне соединения, на которой она была вызвана; она не влияет на способ обработки срочных данных, применяемый на противоположной стороне соединения. К тому же, она влияет только на способ обработки входящих срочных данных, а не на способ их отправки.
Для демонстрации того, как изменяется программа сервера при использовании встроенных срочных данных, добавим соответствующий вызов метода sockopt() после вызова функции accept ().
$sock.= $listen->accept;
$sock->sockopt(SO_OOBINLINE,1); # Разрешить использовать встроенные срочные данные
Как и прежде, при получении каждого байта срочных данных вызывается обработчик URG сервера. Однако поскольку эти данные теперь являются встроенными, вызов функции recv () оканчивается аварийно с ошибкой EINVAL. Срочные данные (символ восклицательного знака) не обрабатываются отдельно, а появляются в выборке данных, считанном функцией sysread ().