Например, в сервере rlogin (сокращение от remote login — дистанционная регистрация) системы UNIX это необходима для выполнения срочного запроса пользователя на уничтожение удаленного процесса, который вышел из-под контроля. Для сервера rlogin достаточно просто завершить соответствующую программу, поскольку она уже не может передать значительный объем данных на клиентский компьютер rlogin, находящийся на другом конце соединения, с которым работает пользователь. Сервер дальше должен сообщить клиенту, что необходимо проигнорировать весь вывод программы вплоть до того момента, когда пользователь нажал клавишу прерывания. Именно для этого и предназначена функция sockatmark ().
$flag = sockatmark($socket)
Функция sockatmark(), позволяет определить местонахождение указателя срочных данных. При обычных внеочередных данных она возвращает истинное значение, если при выполнении очередной операции чтения функция sysread ( ) возвратит байт, который следует за срочными данными. В случае сокетов SO_OOBINLINE функция sockatmark() возвращает истинное значение, если очередной вызов функции sysread () вернет сами срочные данные.
При помощи данного функционала и опыта работы с сетевыми приложениями можно организовать распределенный шлюз удаленной обработки данных. К таковым может быть отнесена искусственная автоматическая накрутка лайков в инстаграме . По мимо всего прочего технология может работать не только со статичной базой, но и также динамическим контентом.
Напомним, что функция sysread () всегда приостанавливается в том место, где находится указатель срочных данных. Это было предусмотрено для того, чтобы в программе можно было вызвать функцию sockatmark (). Общая схема ее применения показана в следующем фрагменте кода.
# Выполнять чтение до получения маркера until (sockatmark($socket)) { my $result = sysread($socket,$data,1024); die "socket closed before reaching mark" unless $result; }
При каждом проходе по циклу функция sysread () вызывается для чтения 1024 байт данных из сокета (которые в данном случае отбрасываются). Цикл завершается нормально при достижении указателя срочных данных или аварийно, если сокет закрывается (или появляется какая-то другая ошибка) до того, как будет найден указатель срочных данных.