zoukankan      html  css  js  c++  java
  • 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插口的。

  • 相关阅读:
    通过HOOK控制进程的创建
    进程退出前删除自身EXE
    Unicode(UTF&UCS)深度历险
    《12个有趣的C语言问答》评析2
    float的深入剖析
    UML六种关系
    socket1
    ios学习之常见问题记录
    栈和队列总结篇
    Entity Framework做IN查询
  • 原文地址:https://www.cnblogs.com/yhp-smarthome/p/6938065.html
Copyright © 2011-2022 走看看