Winsock
This article needs additional citations for verification. (July 2010) |
In
Background
Early Microsoft operating systems, both MS-DOS and Microsoft Windows, offered limited networking capability, chiefly based on
The drawback faced by all of these vendors was that each of them used their own API (Application Programming Interface). Without a single standard programming model, it was difficult to persuade independent software developers to create networking applications which would work with any vendor's underlying TCP/IP implementation. Add to this the fact that end users were wary of getting locked into a single vendor and it became clear that some standardization was needed.
The Windows Sockets project had its origins in a Birds Of A Feather session held at Interop '91 in San Jose on October 10, 1991.
All the participating developers resisted the shortening of the name to simple Winsock for a long time,[
Technology
The Windows Sockets API specification defines two interfaces: the
Windows Sockets code and design are based on
However it was a design goal of Windows Sockets that it should be relatively easy for developers to port socket-based applications from
Specifications
- Version 1.0 (June 1992) defined the basic operation of Winsock. It was kept very close to the existing interface of Berkeley sockets to simplify porting of existing applications. A few Windows-specific extensions were added, mainly for asynchronous operations with message-based notifications.
- Although the document didn't limit support to TCP/IP, TCP and UDP were the only protocols explicitly mentioned. Most vendors only delivered TCP/IP support, although Winsock from DECNetsupport as well.
- Version 1.1 (January 1993) made many minor corrections and clarifications of the specification. The most significant change was the inclusion of the gethostname() function.
- Winsock 2 was a backwards-compatible extension of Winsock 1.1. It added support for protocol-independent name resolution, asynchronous operations with event-based notifications and completion routines, layered protocol implementations, multicasting, and quality of service. It also formalized support for multiple protocols, including IPX/SPX and DECnet. The new specification allowed sockets to be optionally shared between processes, incoming connection requests to be conditionally accepted, and certain operations to be performed on socket groups rather than individual sockets. Although the new specification differed substantially from Winsock 1, it provided source- and binary-level compatibility with the Winsock 1.1 API. One of the lesser known additions was the Service Provider Interface (SPI) API and Layered Service Providers.
- Versions 2.0.x (May 1994 onwards) had internal draft status, and were not announced as public standards.
- Version 2.1.0 (January 1996) was the first public release of the Winsock 2 specification.
- Version 2.2.0 (May 1996) included many minor corrections, clarifications, and usage recommendations. It was also the first version to remove support for 16-bit Windows applications.
- Version 2.2.1 (May 1997) and Version 2.2.2 (August 1997) introduced minor functionality enhancements. Mechanisms were added for querying and receiving notification of changes in network and system configuration.
- The IPv6 Technical Preview for Windows 2000 (December 2000) saw the first implementation of RFC 2553 (March 1999, later obsoleted by RFC 3493), a protocol-independent API for name resolution, which would become part of Winsock in Windows XP.
Updates in Windows 8
Windows 8 includes the "RIO" (Registered IO) extensions for Winsock.[2] These extensions are designed to reduce the overhead of the user to kernel mode transition for the network data path and the notification path, but use the rest of the regular Windows TCP and UDP stack (and uses existing network cards). The setup path (for example, the "connect" function) is unchanged from the regular Winsock path.
Implementations
Microsoft implementations
- Microsoft did not supply an implementation of Winsock 1.0.
- Version 1.1 of Winsock was supplied in an add-on package (called Wolverine) for Windows for Workgroups (code named Snowball). It was an integral component of Windows 95 and Windows NT from versions 3.5 and onwards (the initial commercially available version of Windows NT, version 3.1, included only a proprietary and quite incomplete implementation of TCP/IP based on the AT&T UNIX System V "STREAMS" API [citation needed]).
- Version 2.1 of Winsock was supplied in an add-on package for Windows 95. It was an integral component of Windows 98, Windows NT 4.0, and all subsequent Windows releases. (Microsoft did not supply implementations of Winsock 2 for Windows 3.x or Windows NT 3.x.)
- Recent versions of Winsock 2.x have been delivered with new Windows releases or as part of service packs.
- Winsock 2 is extensible by a mechanism known as a Layered Service Provider (LSP). Winsock LSPs are available for a wide range of useful purposes, including Internet parental controls, web content filtering, QoS etc. The layering order of all providers is kept in the Winsock Catalog. In previous versions of Windows, removing a buggy LSP could result in corruption of the Winsock catalog in the registry, potentially resulting in a loss of all network connectivity. Winsock in Windows XP Service Pack 2, Windows Server 2003 Service Pack 1 and all later Windows operating systems has the ability to self-heal after a user uninstalls such an LSP.
Other implementations
- Among the other vendors offering Winsock-compliant TCP/IP and UDP/IP stacks were (alphabetically) 3Com, Beame & Whiteside, DEC, Distinct, Frontier, FTP Software, IBM, Microdyne, NetManage, Novell, Sun Microsystems and Trumpet Software International.
- Trumpet Winsock by Peter Tattam was one of the few Winsock 1.0 implementations that could be installed under Windows 3.0, which had no built-in support for Winsock.[3][4] Trumpet was also the most popular shareware implementation of Winsock for Windows 3.x. Trumpet Winsock 5.0 is available for Windows 95/98 and Windows NT and includes a Winsock 1.1 compliant IPv6 stack for these operating systems.[5]
- The Wine project contains a source and binary compatible reimplementation of Winsock on top of the BSD sockets API.
See also
- Berkeley sockets
- Layered Service Provider (Winsock LSP)
References
- ^ "Winsock Version 1.0 Rev.A". Retrieved 8 October 2020.
- ^ "New techniques to develop low-latency network apps". Channel 9.
- ^ "Mosaic turns 20: Let's fire up the old girl, show her the web today". theregister.co.uk.
- ^ "What It Was Like To Build A World Wide Web Site In 1995". fastcompany.com. 18 November 2015.
- ^ "Downloads". www.trumpet.com.au.
External links
- MSDN - Windows Socket 2 What's New Reference
- MSDN - Windows Socket 2 Start page
- Sockets FAQ - Windows Sockets FAQ
- Client / Server Programming with TCP/IP Sockets at the Wayback Machine (archived March 3, 2016) - Winsock C++ Programming
- Porting Berkley Socket programs to Winsock
- Windows Network Development blog — Microsoft developer blog covering Winsock, WSK, WinINet, Http.sys, WinHttp, QoS and System.Net, with a focus on features being introduced in Windows Vista
- Brief History of Microsoft on the Web
- WinSock Development Information
- Winsock Programmer's FAQ