linux socket系统调用层

一. socket操作系统调用

我们在上一节中说到过,在应用层和协议无关层之间,是一个系统调用接口层。系统调用接口如下:

  • socketcall socket系统调用
  • socket 建立socket
  • bind 绑定socket到端口
  • connect 连接远程主机
  • accept 响应socket连接请求
  • send 通过socket发送信息
  • sendto 发送UDP信息
  • sendmsg 参见send
  • recv 通过socket接收信息
  • recvfrom 接收UDP信息
  • recvmsg 参见recv
  • listen 监听socket端口
  • select 对多路同步I/O进行轮询
  • shutdown 关闭socket上的连
  • getsockname 取得本地socket名字
  • getpeername 获取通信对方的socket名字
  • getsockopt 取端口设置
  • setsockopt 设置端口参数
  • sendfile 在文件或端口间传输数据
  • socketpair 创建一对已联接的无名socket

当在应用中调用socket()函数时,就会触发系统调用,跟socket相关的操作函数都会被映射到sys_socketcall的系统调用中(32位系统),在文件unistd_32.h中有其系统调用号表。对于64位系统,系统调用号会不一样,在文件unistd_64.h中,跟socket相关的系统调用会直接对应,不用都映射到sys_socketcall(实际上,64位系统中会通过定义__NO_STUBS宏屏蔽这个调用号)。具体的系统调用过程可以参考如下链接:http://lib.csdn.net/article/embeddeddevelopment/55382

因为网络栈是在内核态,所以从socket api到操作socket插口存在一个系统调用层。在本文中,我们看到了当使用socket api时,是怎么调用到系统调用的,在下一篇中,将介绍对应的系统的调用是怎么操作socket插口的。

原文地址:https://www.cnblogs.com/yhp-smarthome/p/6938065.html