#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)EN.
socketcall() is a common kernel entry point for the socket system calls. call determines which socket function to invoke. args points to a block containing the actual arguments, which are passed through to the appropriate call.
사용자 프로그램은 사용 이름들로 적당한 함수들을 호출해야 한다. 단지 표준 라이브러리 수행자나 해커들만이 socketcall()를 알 필요가 있다.
이 함수는 리눅스에 의존하며 호환성을 염두에 둔 프로그램에서는 사용해서는 안된다.
On some architectures—for example, x86-64 and ARM—there is no socketcall() system call; instead socket(2)EN, accept(2)EN, bind(2)EN, and so on really are implemented as separate system calls.
On x86-32, socketcall() was historically the only entry point for the sockets API. However, starting in Linux 4.3, direct system calls are provided on x86-32 for the sockets API. This facilitates the creation of seccomp(2)EN filters that filter sockets system calls (for new user-space binaries that are compiled to use the new entry points) and also provides a (very) small performance improvement.
accept(2)EN, bind(2)EN, connect(2)EN, getpeername(2)EN, getsockname(2)EN, getsockopt(2)EN, listen(2)EN, recv(2)EN, recvfrom(2)EN, recvmsg(2)EN, send(2)EN, sendmsg(2)EN, sendto(2)EN, setsockopt(2)EN, shutdown(2)EN, socket(2)EN, socketpair(2)EN