WinsockIn de computerwereld is Winsock (afkorting voor Windows Sockets) een specificatie die definieert hoe Windows netwerkmogelijkheden aanbiedt aan toepassingen, met name TCP/IP. AchtergrondDe eerste besturingssystemen van Microsoft, zowel MS-DOS als Windows boden beperkte netwerkmogelijkheden, hoofdzakelijk gebaseerd op NetBIOS (een technologie van IBM die Microsoft overnam). Microsoft negeerde de protocol-stack TCP/IP volkomen. Een aantal groepen van universiteiten en commerciële aanbieders, waaronder de PC/IP-groep van het MIT, FTP Software, Sun Microsystems, Ungermann-Bass en Excelan, introduceerden TCP/IP-producten voor MS-DOS, vaak als onderdeel van een hardware/software-bundel. Toen Microsoft Windows werd uitgebracht, sloten aanbieders zoals Distinct en Netmanage zich aan in het aanbieden van TCP/IP voor Windows. Zelfs Microsoft leverde een product met beperkte mogelijkheden. Het nadeel, dat al deze aanbieders voor ogen kwam, was dat ieder van hen zijn eigen API gebruikte. Zonder een enkel standaard programmeermodel was het moeilijk om onafhankelijke softwareontwikkelaars netwerkapplicaties te laten maken en gebruikers waren terughoudend om zich vast te binden aan een enkele aanbieder. Er was in de loop der jaren al een aantal succesvolle standaardisatiepogingen gedaan op het gebied van netwerken met pc's. De eerste ervan was een ontwikkelingsprogramma, gesponsord door de luchtmacht van de VS, voor RFC1001/1002, een NetBIOS-implementatie lopend via TCP/IP. Een tweede was de poging voor een packet-driver van Crynwr die gestart werd door FTP software en geleid werd door Russ Nelson. Winsock werd voorgesteld door Martin Hall van JSB Software (het latere Stardust Technologies) tijdens de Interop van oktober 1991, tijdens een "Birds of a Feather"-sessie. De eerste uitgave van de specificatie werd geschreven door Martin Hall, Mark Towfiq van Microdyne (later behorende bij Sun Microsystems), Geoff Arnold van Sun Microsystems, en Henry Sanders van Microsoft, met hulp van vele anderen. Er ontstond enige discussie over hoe het kopieerrecht, intellectueel eigendom en andere potentiële 'anti-trust'-zaken te omschrijven en er werd uiteindelijk voorgesteld om het te overleggen aan de IETF of om een non-profitorganisatie hiervoor op te richten. Uiteindelijk werd besloten om het kopieerrecht van de specificatie neer te leggen bij de vier auteurs in de vorm van (onafhankelijke) individuen. TechnologieDe Winsock-specificatie definieert twee interfaces: de API die gebruikt wordt door applicatie-ontwikkelaars en de SPI die netwerksoftware-ontwikkelaars in mogelijkheden voorziet om nieuwe protocol-modules aan het systeem toe te voegen. Iedere interface vertegenwoordigt een contract. De API garandeert dat een bindende applicatie zich correct zal gedragen met een overeenkomende protocolimplementatie van willekeurig welke software-aanbieder. De SPI garandeert dat een overeenkomende protocolmodule aan Windows toegevoegd kan worden en daardoor bruikbaar is voor een, aan de API gebonden, applicatie. Alhoewel deze contracten belangrijk waren toen Winsock voor het eerst werd uitgebracht, zijn ze nu slechts nog interessant voor academici. Microsoft levert tegenwoordig een TCP/IP-stack van hoge kwaliteit bij alle recente versies van Windows en er zijn geen andere belangrijke onafhankelijke alternatieven. Noch is er een overmatige interesse om andere protocollen te implementeren behalve TCP/IP. Winsock is gebaseerd op BSD-sockets, maar voorziet tevens in toegevoegde functionaliteit om de API samen te laten werken met het standaard programmeermodel van Windows. De Winsock API dekt bijna alle mogelijkheden van de API van de BSD-sockets, maar er waren enkele onvermijdbare hindernissen die voortkwamen uit het fundamentele verschil tussen UNIX en Windows (alhoewel eerlijkheidshalve Winsock minder van de BSD-sockets verschilde dan deze laatste ten opzichte van STREAMS). Het was echter al als doel gesteld tijdens het ontwerp van Winsock dat het relatief makkelijk zou zijn voor ontwikkelaars om applicaties van Unix naar Windows te porteren op basis van sockets. Het maken van een API die alleen geschikt was voor het schrijven van nieuwe Windowsprogramma's werd niet als voldoende beschouwd. Daarom bevatte Winsock een aantal elementen die ontwikkeld waren om portering te faciliteren. Bijvoorbeeld, Unix-applicaties konden dezelfde errno-variabele gebruiken om netwerkfouten en fouten in de standaard C-bibliotheken op te sporen. Omdat dit in Windows niet mogelijk was, introduceerde Winsock een vaste toegewijde functie, WSAGetLastError(), om informatie omtrent fouten op te sporen. Zulke mechanismen waren handig, maar het porteren van applicaties bleef behoorlijk complex. Vele traditionele TCP/IP-applicaties zijn geïmplementeerd met gebruikmaking van mogelijkheden die Unixspecifiek zijn, zoals pseudoterminals en de gevorkte systeemaanroepen. Het reproduceren van dit soort mogelijkheden in Windows was problematisch. Binnen een zeer korte tijd maakte porteren plaats voor de ontwikkeling van op Windows toegespitste applicaties. Specificaties
ImplementatiesMicrosoftimplementaties
Implementaties van derden
Zie ookExterne links
Bron
|