sys/socket.h 网络套接字功能在哪里(以及如何)实现?

Posted

技术标签:

【中文标题】sys/socket.h 网络套接字功能在哪里(以及如何)实现?【英文标题】:Where(and how) are the sys/socket.h network socket functions implemeneted? 【发布时间】:2013-01-13 19:47:02 【问题描述】:

所以我下载并编译了 FreeBSD Sys/Socket.h 头文件,我注意到它包含套接字函数原型但没有实现。 Windows 套接字使用实现这些功能的 DLL,但 Windows 的东西是闭源的。如果我想使用 Linux 做网络程序,在哪里可以找到实现头文件?可以自己写吗?使用网络 I/O 设备需要操作系统调用。所以我的想法是对内核进行系统调用以打开设备并提供要写入帧的内存地址。无需编写全新的设备驱动程序,请注意。

【问题讨论】:

我只需检查 source repository 并搜索(使用 grep 或 IDE)以查找相关函数的实现。 你为什么想要实际的实现?你可以在没有它的情况下进行网络编程,我实际上建议不要尝试阅读任何网络堆栈实现,因为它通常是操作系统中一些最复杂的子系统。复数“子系统”不是拼写错误,因为网络堆栈通常是几个子系统,分布在操作系统及其内核上。 Joachim,我对了解网络功能如何在最基本的层面上工作以及为网络适配器编写设备驱动程序非常感兴趣。 如果你真的想知道它的实现,我建议你尝试找一本 W. Richard Stevens 的书TCP/IP Illustrated volume 2: The Implementation。 【参考方案1】:

在 Unix 上,套接字函数位于 C library 中。这些主要是围绕 OS system calls 的瘦包装器。如果您使用的是 Linux,请查找 GLibC 的来源。

【讨论】:

Nikolai,GCC 是否包含带有套接字功能的 GLibC? 我相信 GCC 和 GLIBC 是独立的项目。

以上是关于sys/socket.h 网络套接字功能在哪里(以及如何)实现?的主要内容,如果未能解决你的问题,请参考以下文章

Linux系统开发: 学习Linux下网络编程

网络编程之socket编程实例

Linux学习_网络广播

Linux网络编程 --- socket编程

IPC-socket

sys/socket.h这个头文件哪里有