每个人都把它称为C中的套接字编程或网络编程,我们通过使用包括sys/socket.h
&开始使用它netinet/in.h
.我们认为这是100%真实.但是当我看到这本书时,脑子里浮现出一些问题
网络互联使用TCP/IP第三卷:客户端 - 服务器编程和应用程序,有4种不同版本
Linux/POSIX套接字
AT&T TLI(传输层接口)套接字
BSD(伯克利)插座
窗口插座
我糊涂了.这清楚地表明Socket API没有标准.
我也很惊讶地看到sys/socket.h
:netinet/in.h
这是POSIX的C库中的一部分http://en.wikipedia.org/wiki/Berkeley_sockets.我现在更困惑了.
为什么没有标准呢?
还有哪些套接字API可用?
这些Socket API之间有什么区别?
当人们说"C语言编程"/"套接字编程"时他们究竟指的是什么?
更多信息的链接?
Warren Young.. 5
为什么没有标准呢?
事实上的标准是BSD套接字,Linux,POSIX和Windows套接字API都是基于它的.
还有哪些套接字API可用?
没有什么仍然广泛使用.在BSD套接字及其衍生产品占领世界之前,有很多.剩下的大多数可能都在嵌入式领域,甚至那些随着主流操作系统继续吞噬越来越多的嵌入式市场而逐渐消失.
到90年代中期,这场战斗几乎已经结束了.赢得了BSD插座.
这些Socket API之间有什么区别?
BSD,Linux和POSIX变体之间存在细微差别,没有比Unixy操作系统之间的任何其他差异更严重的了.
他们拥有本书的Linux/POSIX版本的原因可能与营销有关,而不是任何技术问题.它回答了一个问题,出版商可能会看到很多,"为什么我需要一本BSD书,我正在运行Linux,而不是BSD!" 或者,现在更常见的是:"什么是BSD?"
从10,000英尺视图,Winsock的是从BSD套接字很大的不同,但因为它是BSD套接字的相当严格的超集,你仍然可以将你的知识了.大多数差异都是BSD套接字的纯扩展,主要与Windows内核体系结构的差异以及Windows程序的构建方式有关.例如,第一个非常大的扩展是异步套接字,这使得在单线程Windows GUI程序中使用套接字比使用纯BSD套接字更容易.后来的扩展支持NT派生内核中可用的特殊功能,这些内核在Unixy系统中没有简单的模拟,比如事件对象和重叠的I/O.
对于它的价值,在某些Unixy系统中也有普通旧BSD套接字的扩展,就像aio_*()
Solaris和其他系统中的东西一样.
如果你的程序必须是源与许多系统兼容,你要么忽略了这些差异,并计划通过所有这些系统共有的共有底边,或你建立某种形式的转换层,可以让您使用平台透明的特点.例如,Apache使用后者,利用每个平台上最快的网络功能,而核心Web服务器代码并不关心网络的完成方式.许多其他程序选择便携式路径,因为它们不是性能关键,因此节省程序员时间更重要.
当人们说"C语言编程"/"套接字编程"时他们究竟指的是什么?
BSD套接字或一些变体.
更多信息的链接?
Winsock程序员的常见问题解答.具体来说,您可能需要查看其资源部分以及常见问题解答文章BSD套接字兼容性.
(免责声明:我是FAQ的维护者.)
为什么没有标准呢?
事实上的标准是BSD套接字,Linux,POSIX和Windows套接字API都是基于它的.
还有哪些套接字API可用?
没有什么仍然广泛使用.在BSD套接字及其衍生产品占领世界之前,有很多.剩下的大多数可能都在嵌入式领域,甚至那些随着主流操作系统继续吞噬越来越多的嵌入式市场而逐渐消失.
到90年代中期,这场战斗几乎已经结束了.赢得了BSD插座.
这些Socket API之间有什么区别?
BSD,Linux和POSIX变体之间存在细微差别,没有比Unixy操作系统之间的任何其他差异更严重的了.
他们拥有本书的Linux/POSIX版本的原因可能与营销有关,而不是任何技术问题.它回答了一个问题,出版商可能会看到很多,"为什么我需要一本BSD书,我正在运行Linux,而不是BSD!" 或者,现在更常见的是:"什么是BSD?"
从10,000英尺视图,Winsock的是从BSD套接字很大的不同,但因为它是BSD套接字的相当严格的超集,你仍然可以将你的知识了.大多数差异都是BSD套接字的纯扩展,主要与Windows内核体系结构的差异以及Windows程序的构建方式有关.例如,第一个非常大的扩展是异步套接字,这使得在单线程Windows GUI程序中使用套接字比使用纯BSD套接字更容易.后来的扩展支持NT派生内核中可用的特殊功能,这些内核在Unixy系统中没有简单的模拟,比如事件对象和重叠的I/O.
对于它的价值,在某些Unixy系统中也有普通旧BSD套接字的扩展,就像aio_*()
Solaris和其他系统中的东西一样.
如果你的程序必须是源与许多系统兼容,你要么忽略了这些差异,并计划通过所有这些系统共有的共有底边,或你建立某种形式的转换层,可以让您使用平台透明的特点.例如,Apache使用后者,利用每个平台上最快的网络功能,而核心Web服务器代码并不关心网络的完成方式.许多其他程序选择便携式路径,因为它们不是性能关键,因此节省程序员时间更重要.
当人们说"C语言编程"/"套接字编程"时他们究竟指的是什么?
BSD套接字或一些变体.
更多信息的链接?
Winsock程序员的常见问题解答.具体来说,您可能需要查看其资源部分以及常见问题解答文章BSD套接字兼容性.
(免责声明:我是FAQ的维护者.)