【问题标题】:Where is the Linux socket implementation?Linux 套接字实现在哪里?
【发布时间】:2017-06-30 15:59:02
【问题描述】:

在 C 程序中,为了使用套接字,我们需要包括:

#include<sys/socket.h>

我已经搜索了socket.c文件(&lt;sys/socket.h&gt;的实现)但是没有找到(find -iname "socket.c*"

  1. 在哪里可以找到 Linux 套接字实现?
  2. 我可以修改此文件并更改此实现吗?

【问题讨论】:

  • 套接字实现是 glibc 运行时库的一部分。您需要安装该库的源代码。通常源文件不会安装在系统上,因为它们不是系统运行所必需的。
  • 您当然可以更改该文件的实现,当然。要使用结果,您必须重新编译生成的库。但请注意不要破坏您正在运行的系统。因此,只需编译库,但首先不要安装结果。而是将一些程序链接到已编译的库并测试是否按预期工作。您可以通过将程序静态链接到您的库或通过更改调用这些程序的进程的LD_LIBRARY_PATH 环境变量来做到这一点。
  • 下载glibc源码后(sudo apt-get install glibc-source)搜索socket.c(/usr/src/glibc)还是找不到socket实现
  • 确实,我必须道歉:glibc 库中的套接字 function 只是内核函数的包装,显然是在内核源代码中实现的。很抱歉造成混乱!
  • 您希望通过更改 libc 或内核中的实现来实现什么?

标签: linux


【解决方案1】:

头文件包含与套接字相关的系统调用的声明。要开始深入实施,请考虑参考Linux source tree 中的net/socket.c 文件。

关于更改实现 - Linux 是根据GNU GPL 条款分发的开源软件产品。如果您将花费相当多的时间来了解如何从头开始重新构建内核,那么您将能够将您想要的任何更改应用于内核并将其部署到您的本地机器(当然风险自负)。

【讨论】:

    【解决方案2】:

    socket() 实现在 linux 内核源代码中的 net/socket.c

    SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)
    

    你可以修改这个文件的实现。

    【讨论】:

      猜你喜欢
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2019-09-26
      • 1970-01-01
      相关资源
      最近更新 更多