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插口的。
                    
                
                
            
        
浙公网安备 33010602011771号