WinSock
WinSock (Windows Sockets API (WSA) пізніше був скорочений до Winsock) — це технічна специфікація, яка визначає доступ мережевого програмного забезпечення Windows до мережевих служб TCP/IP. Вона визначає стандартний інтерфейс між Windows TCP/IP клієнтськими програмами (такими як FTP-клієнт чи веббраузер) і базується на протоколі TCP/IP. Визначення засноване на Berkeley Sockets API моделі, використовуваної в BSD для зв'язку між програмами.
Передісторія
Ранні операційні системи Microsoft, такі, як MS-DOS та Microsoft Windows, мали обмежені можливості роботи з мережею, головним чином засновані на протоколі NetBIOS. В той час, операційні системи Microsoft не підтримували протоколу TCP/IP. Кілька університетських груп та комерційних фірм, в тому числі група PC/IP в МТІ, FTP Software, Sun Microsystems, Ungermann-Bass і Excelan представили TCP/IP розробки для MS-DOS, часто як частина апаратно-програмного комплексу.
Після випуску Microsoft Windows 2.0 до цих розробників приєдналися інші, такі як Distinct та NetManage, які допомогли в наданні підтримки протоколів TCP/IP для Windows. Недолік, з якими стикнулись всі вищеперелічені розробники, полягав, в тому, що кожен з них використовували свої власні API (Application Programming Interface). Без єдиної стандартної моделі програмування, важко було переконати незалежних розробників програмного забезпечення у створенні мережних програм, які б працювали на основі TCP/IP реалізації будь-якого з розробників. Додайте до цього той факт, що кінцеві користувачі скептично ставились до можливості використання рішень одного розробника тому, стало зрозуміло, що стала необхідною деяка стандартизація.
Модель Sockets API Windows була запропонована Мартіном Холлом із JSB Software (пізніше Stardust Technologies), як BOF (Birds of a Feather) узгоджена на CompuServe BBS мережі в жовтні 1991 року. Перше видання специфікації було написане Мартіном Холлом, Марком Товфіком з Microdyne (пізніше Sun Microsystems), Джеффоом Арнольдом (Sun Microsystems), Генрі Сандерсом та Дж. Алардом від Microsoft, та за участю багатьох інших розробників. Було обговорено про те, кому присвоїти авторські права, права інтелектуальної власності, та потенційних питань боротьби з протиправними порушеннями, також увагу було приділено роботі через IETF або створення некомерційного фонду. Врешті-решт, було вирішено, що авторські права на специфікацію належатимуть п'ятьом авторам, як фізичним особам.
Технологія
Sockets API Windows специфікація визначає два інтерфейси: API, який використовується для розробки програм, та SPI, який забезпечує засоби для розробників мережевого програмного забезпечення, для додавання нових модулів та протоколів до системи. Кожен інтерфейс являє собою з'єднання. API гарантує, що відповідна програма буде працювати правильно із сумісною реалізацією протоколу від будь-якого постачальника мережевого програмного забезпечення. Договір SPI гарантує, що відповідний модуль протоколу може бути доданий до Windows і тим самим може бути використаний API-сумісними програмами. Хоча ці договори були важливими при створенні Windows Sockets як мережевого середовища, але тепер вони представляють лише академічний інтерес. Функції, які включені в Sockets API Windows версії 2.0 використовують функції протоколів IPX / SPX, проте немає комерційного програмного забезпечення, яке б використовувало даний набір протоколів. Microsoft впровадила протоколи TCP/IP в усі сучасні версії Windows, тому, що немає ніяких суттєвих незалежних альтернатив даним протоколам. Також не було зацікавленості у реалізації протоколів, відмінних від TCP/IP.
Windows Sockets заснована на Sockets BSD, проте, надає додаткові функціональні можливості, що дозволяють API дотримуватися стандартної моделі програмування Windows. Sockets API Windows охоплюють майже всі особливості BSD-Sockets API, але є деякі неминучі перешкоди, які виникли головним чином із основних відмінностей між Windows і Unix, тому всі виклики функцій в API починаються з еліасу(Alias) WSA, наприклад WSASend () для відправки даних на сокет.
При розробці Windows Sockets основним критерієм розробки був відносно легкий імпорт використовуючих socket програм із Unix систем у Windows. Це не вважається достатнім для створення API, яка була корисна тільки для нових програм у Windows. Тому у Windows Sockets включено ряд елементів, які були розроблені для полегшення портування. Наприклад, Unix програм можуть використати ті ж позначення помилок запису, мережевих помилок та помилок, розміщених в стандартній бібліотеці З функціями. Оскільки це не було можливо в Windows, Windows Sockets отримав окрему функцію, WSAGetLastError (), для отримання інформації про помилки. Подібні механізми були корисними, але застосування портування залишається надзвичайно складним. Багато оригінальних TCP/IP програм були реалізовані за допомогою системи функцій, специфічних для Unix, таких, як псевдо термінали та системи виклику вилки, відтворення такого функціоналу в Windows було проблематичним. Протягом відносно короткого періоду часу, портування поступилися розробці спеціальних програм для