在Linux中,要创建套接字,我们包含sys / socket.h头文件并使用socket()函数。头文件位于/usr/include/sys/socket.h。
extern int socket (int __domain, int __type, int __protocol) __THROW;
任何人都可以告诉实际实现socket()函数的位置。
感谢。
答案 0 :(得分:4)
NOTE:事实上,
int socket (int __domain, int __type, int __protocol) __THROW
在glibc中实现,
并且glibc调用内核文件net/socket.c中实现的内核函数sys_socket。
asmlinkage long sys_socket(int family, int type, int protocol);
答案 1 :(得分:1)
socket(2)是ssytem call。 Glibc 中的socket
函数只是一个很小的包装器,可以进行真正的系统调用。
从应用程序的角度来看,系统调用是 atomic ;换句话说,运行Linux应用程序的虚拟机是 x86 计算机(非特权指令集),增加了内核提供的300多个系统调用。另请参阅Assembly Howto,其中说明了如何编码系统调用。详细了解linux kernel以及syscalls(2)和intro(2)手册页。
关于套接字的真正工作是在内核中完成的,它是网络子系统。
答案 2 :(得分:0)
这是=> socket.c
通常大多数套接字函数(包括这个函数)只是系统调用的包装(直接调用内核),因此全部由全能内核本身处理。
以下是内核的实现:SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol){...}