4.2 Winsock概述
Winsock于1993年1月发布,最初有一些限制,其中包括只能用于TCP/IP协议的连接,不过Winsock 2已经能够使用其他类型的协议。与Winsock相关的有两个动态链接库(DLL)取决于应用程序是16位还是32位,其中winsock.dll用于16位应用程序,而wssock32.dll则用于32位应用程序。Winsock的另一个主要不足之处是它不能一次运行多个实例,这个限制也许算不上是缺陷,而只是开发Winsock的程序员们为了让组件能在Microsoft早期的操作系统上使用而做出的取舍。
由于Winsock在功能上的局限性,Winsock 2成为了今天Windows套接字编程的标准API。Winsock 2最初可用于Windows 98和Windows NT 4.0操作系统,此后所有的Windows操作系统都安装了Winsock 2,并可支持它提供的功能。
如果机器上没有ws2_32.dll,则本章的所有程序将不能编译或运行;ws2_32.dll是提供Winsock 2功能的组件,可从Microsoft的网站上下载。
Winsock 2是一个专一的32位组件,它不能在Windows 3.11、NT 3.51或Microsoft公司其他任何早期的16位操作上运行。不过,在较早的16位操作系统上编写的使用Winsock 1.1的程序却可以在较新的操作系统上运行,因为Winsock 2 差不多是完全向后兼容的(backward-compatible)。惟一的例外是,当Winsock 1.1应用程序使用了阻塞钩子(blocking hooks)时,Winsock 2将不能支持。与Winsock 1.1相比,Winsock 2的新功能包括如下方面。
● 更多的协议:异步传输模式(ATM)、网间分组交换(Internetwork Packet Exchange, IPX)/顺序分组交换(Sequenced Packet Exchange,SPX),以及数字设备公司(Digital Equipment Corporation,DEC)的DECnet。
● 有条件地接受连接:在确定接受连接之前,可以拒绝连接。
● 连接与断开数据连接(connect and disconnect data):只能应用于支持这项功能的传输协议;TCP/IP不支持这项功能。
● 分层的服务提供者(Layered Service Providers):可将服务加到现有的传输提供者。
● 多点及组播(Multipoint and Multicast):协议无关(protocol-independent)的API与特定协议(protocol-specified)的API。
● 多名字空间(Multiple Namespace):选择解析主机名或定位服务的协议。
● 多协议支持(Multiple Protocol Support):Windows的系统架构为服务提供者提供了“插入”(plug-in)与“堆叠”(pile-on)的能力。
● I/O重叠与事件对象:利用Win32的方式,改进服务的吞吐量。
● 服务质量(Quality of Service,QoS):套接字带宽的监视与跟踪。
● 分发与收集(Scatter and Gather):几乎可同时从几个缓冲区发送和接收分组。
● 套接字共享:两个或多个进程共享同一个套接字。
● 传输协议独立(Transport Protocol Independence):可根据协议所提供的服务选择协议。
● 厂商标识与扩展机制(Vendor IDs and a Mechanism for Vendor Extensions):厂商可以加入特定的API。






