4

在 Linux 中,要创建套接字,我们包含 sys/socket.h 头文件并使用 socket() 函数。头文件位于 /usr/include/sys/socket.h。

extern int socket (int __domain, int __type, int __protocol) __THROW;

谁能告诉 socket() 函数实际实现的位置。

谢谢。

4

3 回答 3

4

实际上, 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);
于 2012-04-06T02:59:09.950 回答
1

socket(2)是一个系统调用Glibc中的socket函数只是进行真正系统调用的一个小包装器。

从应用程序的角度来看,系统调用是原子的;换句话说,运行 Linux 应用程序的虚拟机是x86机器(非特权指令集),内核提供了 300 多个系统调用。另请参阅Assembly Howto,它解释了如何对系统调用进行编码。阅读有关linux 内核以及syscalls(2)intro(2)手册页的更多信息。

关于套接字的真正工作是在内核内部完成的,它是网络子系统。

于 2012-04-06T08:39:36.350 回答
0

这是 => socket.c

通常大多数套接字函数,包括这个函数,只是系统调用(直接调用内核)的包装器,因此它都是由全能的内核自己处理的。

这是内核的实现:SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol){...}

于 2012-04-06T03:30:19.257 回答