socketcall -
системные
вызовы
сокетов
Standard C library (
libc,
-lc)
#include <linux/net.h> /* Definition of SYS_* constants */
#include <sys/syscall.h> /* Definition of SYS_socketcall */
#include <unistd.h>
int syscall(SYS_socketcall, int call, unsigned long *args);
Note: glibc provides no wrapper for
socketcall(), necessitating
the use of
syscall(2).
socketcall() — это
общая
точка
входа в
ядро всех
системных
вызовов
сокетов. В
аргументе
call задаётся
функция
сокета,
которая
будет
вызвана.
Аргумент
args
указывает
на блок
параметров
функции,
которые
передаются
соответствующему
вызову.
Пользовательские
программы
должны
оперировать
обычными
функциями,
имеющими
стандартные
имена. О
существовании
socketcall()
необходимо
знать лишь
создателям
стандартных
библиотек
и ядра.
Эта
функция
есть
только в Linux, и
она не
должна
использоваться
в
переносимых
программах.
On some architectures—for example, x86-64 and ARM—there is no
socketcall() system call; instead
socket(2),
accept(2),
bind(2), and so on really are implemented as separate system calls.
Для
архитектуры
x86-32,
socketcall()
исторически
имел
только
одну точку
входа в
программном
интерфейсе
сокетов.
Однако
начиная с Linux 4.3,
для x86-32
появились
прямые
системные
вызовы в
программном
интерфейсе
сокетов. for the sockets API.
Это
упрощает
создание
фильтров
seccomp(2), которые
отбирают
системные
вызовы
сокетов
(для новых
пользовательских
исполняемых
файлов,
которые
компилируются
с
использованием
новых
точек
входа), а
также
улучшают
(совсем
немного)
производительность.
accept(2),
bind(2),
connect(2),
getpeername(2),
getsockname(2),
getsockopt(2),
listen(2),
recv(2),
recvfrom(2),
recvmsg(2),
send(2),
sendmsg(2),
sendto(2),
setsockopt(2),
shutdown(2),
socket(2),
socketpair(2)
Русский
перевод
этой
страницы
руководства
был сделан
Alexander Golubev <
[email protected]>, Azamat Hackimov
<
[email protected]>, Hotellook, Nikita
<
[email protected]>, Spiros Georgaras <
[email protected]>, Vladislav
<
[email protected]>, Yuri Kozlov <
[email protected]>
и Иван
Павлов <
[email protected]>
Этот
перевод
является
бесплатной
документацией;
прочитайте
Стандартную
общественную
лицензию GNU
версии 3
или более
позднюю,
чтобы
узнать об
условиях
авторского
права. Мы не
несем
НИКАКОЙ
ОТВЕТСТВЕННОСТИ.
Если вы
обнаружите
ошибки в
переводе
этой
страницы
руководства,
пожалуйста,
отправьте
электронное
письмо на
[email protected]