应用程序调用socket()函数后进入系统调用。Linux内核提供的唯一的socket系统调用函数是asmlinkage long sys_socketcall(int call, unsigned long * args),该函数在net/socket.c中定义。
socket中最重要的结构是socket结构体,该结构体定义在include/linux/net.h中。
struct socket{
...
struct proto_ops *ops;
...
struct sock sk;
...
}
proto结构体代表了从socket层到传输层的接口
对于send、sendto、sendmsg最后都是调用sock_sendmsg()来发送的。recv、recvfrom、recvmsg是调用sock_recvmsg接收的。
ioctrl是文件系统的一个系统调用,sock_ioctrl是套接字接口文件系统的ioctrl接口的实现。