首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >还有哪些套接字API可用?每个套接字API之间有什么区别?

还有哪些套接字API可用?每个套接字API之间有什么区别?
EN

Stack Overflow用户
提问于 2010-01-15 10:04:08
回答 4查看 1.9K关注 0票数 2

在C中,每个人都将它称为套接字编程或网络编程,我们通过包含sys/socket.hnetinet/in.h开始使用它。我们以为这是100%的事实。但是当我看到这本书时,我脑海中浮现出的问题

与TCP/IP卷三的互连:客户机-服务器编程和应用程序,,可在4种不同版本中使用

  1. Linux/POSIX套接字
  2. AT&T TLI (传输层接口)套接字
  3. BSD (Berkeley)套接字
  4. 窗口套接字

我很困惑。这清楚地表明没有套接字API的标准。

此外,我惊讶地看到sys/socket.h & netinet/in.h插座中POSIX库的一部分。我现在更困惑了。

  1. 为什么没有这方面的标准?
  2. 还有哪些套接字API可用?
  3. 每个套接字API之间有什么区别?
  4. 当人们仅仅说“C中的网络编程”/“套接字编程”时,他们到底指的是什么?
  5. 任何更多信息的链接?
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-16 01:01:51

为什么没有这方面的标准?

事实上的标准是BSD套接字,它是Linux、POSIX和Windows套接字API所基于的。

还有哪些套接字API可用?

没有被广泛使用的东西。在BSD套筒及其衍生产品接管世界之前,有很多。剩下的大部分可能都在嵌入式世界,而且随着主流OSes继续吞并越来越多的嵌入式市场,即使是那些也正在消失。

这场战斗几乎是在90年代中期打响的,BSD套接字赢了。

每个套接字API之间有什么区别?

BSD、Linux和POSIX变体之间的差别很小,没有什么比Unixy操作系统之间的任何其他差异更严重了。

他们之所以有一个Linux/POSIX版本的这本书,可能更多的原因是营销,而不是任何技术。它回答了出版商可能看到的一个问题,“为什么我需要一本BSD书,我在运行Linux,而不是BSD!”或者,更常见的是:“什么是BSD?”

从10,000英尺的视图来看,Winsock与BSD套接字非常不同,但是由于它是BSD套接字的一个相当严格的超集,所以您仍然可以将知识转移到BSD套接字上。大多数差异都是对BSD套接字的纯扩展,主要与Windows内核体系结构和Windows程序构建方式的差异有关。例如,第一个真正大的扩展是异步套接字,这使得在单线程Windows程序中使用套接字比使用纯BSD套接字容易得多。以后的扩展支持NT派生内核中可用的特殊特性,这些内核在Unixy系统中没有简单的模拟,比如事件对象和重叠的I/O。

值得注意的是,在一些Unixy系统中也有对普通旧BSD套接字的扩展,比如Solaris和其他系统中的aio_*()

如果您的程序必须与许多系统兼容,您可以忽略这些差异,将程序放到所有这些系统共享的公共基础上,或者构建某种允许您透明地使用平台特性的转换层。例如,Apache使用了每个平台上最快的网络特性,而核心web服务器代码并不关心网络是如何实现的。许多其他程序选择可移植路径,因为它们不影响性能,因此节省程序员的时间就更重要了。

当人们仅仅说“C中的网络编程”/“套接字编程”时,他们到底指的是什么?

BSD套接字或其他变体。

任何更多信息的链接?

Winsock程序员的常见问题。具体来说,您可能想看看它的资源部分,以及FAQ文章BSD套接字兼容性

(免责声明:我是FAQ的维护者。)

票数 5
EN

Stack Overflow用户

发布于 2010-01-15 10:12:47

Linux、BSD和Windows套接字API(至少;我不知道AT& TLI )非常相似。例如,Windows是/最初基于BSD的。

票数 2
EN

Stack Overflow用户

发布于 2010-01-15 20:04:43

为什么没有这方面的标准?

确实有。你说了几个。任何人都可以发布一个“标准”,不需要仅仅是一个,也不需要某个有权力授予“一种真实方式”的控制权威。在网络方面,真正的标准是网络协议本身。每个人都必须与他们相互合作,否则任何事情都不能一起工作。任何给定的平台实现API以实现该目标的方式可能有所不同。

每个套接字API之间有什么区别?

Linux/POSIX/BSD都是类似的。Windows有点不同,但是由于它仍然必须支持底层协议,所以功能最终几乎是一样的。老实说,我不知道谁还在使用AT&T TLI,如果他们曾经使用过。

还有哪些套接字API可用?

可能有很多,但这是一个谁再使用它们的问题。IBM曾经有过一群人,在过去的日子里,几乎所有的主要制造商都有。但我认为这些对于大多数人来说都已经退休到历史垃圾桶,因为大多数人都使用TCP。

当人们仅仅说“C中的网络编程”/“套接字编程”时,他们到底指的是什么?

没什么精确的。从技术上讲,C语言对网络编程一无所知。然而,许多供应商(例如Unix、Linux、Windows等)提供了C库来执行网络操作,因此出现了上面提到的许多API。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2070681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档