Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«4.Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π΅ устройство Windows (Π³Π». 12-14)Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 26

Автор ΠœΠ°Ρ€ΠΊ Руссинович

β€’ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ многоадрСсных сообщСний, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ источника сразу нСскольким адрСсатам.

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ рассмотрим ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Winsock ΠΈ опишСм способы Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ.


Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Winsock Π½Π° клиСнтской сторонС

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ шаг Winsock-прилоТСния β€” инициализация Winsock API Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. B Windows 2000 Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°Ρ‚Π΅ΠΌ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ сокСт, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ соСдинСния. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ адрСс сСрвСра, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ, Π²Ρ‹Π·ΠΎΠ²ΠΎΠΌ gethostbyname. Winsock Π½Π΅ зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°, поэтому адрСс ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ ΠΏΠΎ Π»ΡŽΠ±ΠΎΠΌΡƒ установлСнному Π² систСмС ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ, ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Winsock (TCP/IP, TCP/IP с IP вСрсии 6, IPX). ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ² адрСс сСрвСра, ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° логичСскиС соСдинСния (connection-oriented client), пытаСтся ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ этому сСрвСру, вызывая Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ connect ΠΈ пСрСдавая Π΅ΠΉ адрСс сСрвСра.

B Windows XP ΠΈ Windows Server 2003 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ адрСс сСрвСра Ρ‡Π΅Ρ€Π΅Π· getaddrinfo, Π° Π½Π΅ gethostbyname. Ѐункция getaddrinfo Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список адрСсов, Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… сСрвСру, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ пытаСтся ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· Π½ΠΈΡ… Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π΅ΠΌΡƒ Π½Π΅ удастся ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ соСдинСниС. Π­Ρ‚ΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ IP вСрсии 4 (IPv4), соСдинится с сСрвСром, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹Ρ‚ΡŒ Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ ΠΊΠ°ΠΊ IPv4-, Ρ‚Π°ΠΊ ΠΈ IPv6-Π°Π΄peca, ΠΏΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ IPv4-Π°Π΄pecy.

Установив соСдинСниС, ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· свой сокСт, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, recv ΠΈ send. ΠšΠ»ΠΈΠ΅Π½Ρ‚, Π½Π΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π° логичСскиС соСдинСния (connectionless client), ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ адрСс Ρ‡Π΅Ρ€Π΅Π· эквивалСнтныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ API, Π½Π΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π½Π° логичСскиС соСдинСния; Π² Π΄Π°Π½Π½ΠΎΠΌ случаС β€” Ρ‡Π΅Ρ€Π΅Π· sendto ΠΈ recvfrom соотвСтствСнно.


Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Winsock Π½Π° сСрвСрной сторонС

ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ сСрвСрного прилоТСния отличаСтся ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠΉ для клиСнтского. ПослС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Winsock API сСрвСр создаСт сокСт ΠΈ выполняСт Π΅Π³ΠΎ привязку ΠΊ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ адрСсу Ρ‡Π΅Ρ€Π΅Π· bind. Как ΠΈ Π² случаС клиСнтского прилоТСния, Ρ‚ΠΈΠΏ адрСса (ΠΏΠΎ TCP/IP, TCP/IP с IP вСрсии 6 ΠΈΠ»ΠΈ ΠΊΠ°ΠΊΠΎΠΌΡƒ-Ρ‚ΠΎ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρƒ) выбираСтся сСрвСрным ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.

Если сСрвСр ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π½Π° логичСскиС соСдинСния, ΠΎΠ½ выполняСт Π½Π° сокСтС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ listen, указывая число соСдинСний, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π½Π° этом сокСтС. Π”Π°Π»Π΅Π΅ ΠΎΠ½ выполняСт ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ accept, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΌΠΎΠ³ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ сокСту. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ ΠΆΠ΄ΡƒΡ‰Π΅Π³ΠΎ запроса Π½Π° соСдинСниС Π²Ρ‹Π·ΠΎΠ² accept Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. B ΠΈΠ½ΠΎΠΌ случаС ΠΎΠ½ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ лишь послС поступлСния запроса Π½Π° соСдинСниС. ПослС Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊ соСдинСниС установлСно, функция accept Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ сокСт, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΡΠ΅Ρ€Π²Π΅Ρ€Π½ΡƒΡŽ сторону соСдинСния. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ° ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π°ΠΊΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, recv ΠΈ send. Рис. 13-3 ΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ ΠΈ сСрвСром Winsock, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° логичСскиС соСдинСния.

ПослС привязки ΠΊ адрСсу сСрвСр, Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΠΉ логичСских соСдинСний, Π½ΠΈΡ‡Π΅ΠΌ Π½Π΅ отличаСтся ΠΎΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°: ΠΎΠ½ посылаСт ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡Π΅Ρ€Π΅Π· сокСт, просто указывая ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹ΠΉ адрСс для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ², Π½Π΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π½Π° логичСскиС соСдинСния, Π½Π΅Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» Π»ΠΈ адрСсат ΠΎΡ‚ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π΅ΠΌΡƒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… β€” Π΄Π΅ΠΉΡ‚Π°Π³Ρ€Π°ΠΌΠΌΡ‹ (datagrams). Π’Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹ ΠΈΠ΄Π΅Π°Π»ΡŒΠ½Ρ‹ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΊΠΎΡ€ΠΎΡ‚ΠΊΠΈΡ… сообщСний, ΠΊΠΎΠ³Π΄Π° Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ доставки Π½Π΅ ΠΈΠ³Ρ€Π°Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π΅ΠΉ Ρ€ΠΎΠ»ΠΈ (Π²ΠΏΡ€ΠΎΡ‡Π΅ΠΌ, ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ само Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ срСдства ΠΏΠΎΠ²Π΅Ρ€Ρ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°).


Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Winsock

C Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния программирования для Windows, сильной стороной Winsock API являСтся Π΅Π³ΠΎ интСграция с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠΌ Windows-сообщСний. Winsock-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСимущСства Ρ‚Π°ΠΊΠΎΠΉ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ для выполнСния асинхронных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ с сокСтом ΠΈ ΠΏΡ€ΠΈΠ΅ΠΌΠ° увСдомлСния ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· стандартноС Windows-сообщСниС ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°. Π­Ρ‚ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Windows-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ позволяСт ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ многопоточности ΠΈ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ сСтСвого Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° ΠΈ Ρ€Π΅Π°ΠΊΡ†ΠΈΠΈ Π½Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π²Π²ΠΎΠ΄ ΠΈΠ»ΠΈ запросы диспСтчСра ΠΎΠΊΠΎΠ½ Π½Π° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΠΊΠΎΠ½ прилоТСния.

ΠšΡ€ΠΎΠΌΠ΅ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, прямо ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… функциям, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π² BSD Sockets, Microsoft Π΄ΠΎΠ±Π°Π²ΠΈΠ»Π° нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π½Π΅ входящих Π² стандарт Winsock. Π”Π²Π΅ ΠΈΠ· Π½ΠΈΡ…, AcceptEx ΠΈ TransmitFile, стоят Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ привСсти здСсь ΠΈΡ… описаниС, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ благодаря ΠΈΠΌ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Web-сСрвСры ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ Windows Π΄ΠΎΡΡ‚ΠΈΠ³Π°ΡŽΡ‚ высокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. AcceptEx являСтся вСрсиСй Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ accept, которая Π² процСссС установлСния соСдинСния с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ адрСс ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ΅ сообщСниС ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°. AcceptEx Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сСрвСрному ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒΡΡ ΠΊ сСрии ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ accept для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ мноТСства входящих соСдинСний. A это позволяСт Web-сСрвСру ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ выполнСния сразу Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Winsock-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ.

Установив соСдинСниС с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ, Web-сСрвСр ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ посылаСт Π΅ΠΌΡƒ Ρ„Π°ΠΉΠ», Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Web-страницу. РСализация Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ TransmitFile ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π° с диспСтчСром кэша, Ρ‡Ρ‚ΠΎ позволяСт сСрвСру ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» нСпосрСдствСнно ΠΈΠ· кэша Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Вакая пСрСсылка Π΄Π°Π½Π½Ρ‹Ρ… называСтся Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (zero-сору), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² этом случаС сСрвСру Π½Π΅ приходится ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ: ΠΎΠ½ просто ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒ Ρ„Π°ΠΉΠ»Π° ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ пСрСсылаСмых Π±Π°ΠΉΡ‚ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, функция TransmitFile позволяСт сСрвСру ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ†Ρƒ Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Π­Ρ‚ΠΎ Π΄Π°Π΅Ρ‚ Π΅ΠΌΡƒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΡΡ‹Π»Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ имя Web-сСрвСра ΠΈ ΠΏΠΎΠ»Π΅, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ указываСтся Ρ€Π°Π·ΠΌΠ΅Ρ€ посылаСмого сообщСния. Internet Information Services (IIS), входящая Π² ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ поставки Windows, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΊ AcceptEx, Ρ‚Π°ΠΊ ΠΈ TransmitFile.

B Windows XP ΠΈ Windows Server 2003 Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Ρ†Π΅Π»Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Π΄Ρ€ΡƒΠ³ΠΈΡ…, ΠΌΠ½ΠΎΠ³ΠΎΡ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, Π² Ρ‚ΠΎΠΌ числС ConnectEx, DisconnectEx ΠΈ TransmitPackets. ConnectEx устанавливаСт соСдинСниС ΠΈ посылаСт ΠΏΠ΅Ρ€Π²ΠΎΠ΅ сообщСниС ΠΏΠΎ этому соСдинСнию. DisconnectEx Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ соСдинСниС ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС описатСля сокСта, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Π΄Π°Π½Π½ΠΎΠ΅ соСдинСниС, Π² Π²Ρ‹Π·ΠΎΠ²Π΅ AcceptEx ΠΈΠ»ΠΈ ConnectEx. НаконСц, TransmitPackets β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π°Π½Π°Π»ΠΎΠ³ TransmitFile с Ρ‚Π΅ΠΌ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ позволяСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Π½ΠΎ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅, находящиСся Π² памяти.


ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ Winsock

Winsock являСтся Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΡ‹ΠΌ API, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ сторонниС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ транспортных сСрвисов (transport service providers, TSP), ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠ΅ интСрфСйсы Winsock ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°ΠΌΠΈ ΠΈΠ»ΠΈ уровнями ΠΏΠΎΠ²Π΅Ρ€Ρ… ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² (это позволяСт Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° прокси). Π‘Ρ‚ΠΎΡ€ΠΎΠ½Π½ΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ пространств ΠΈΠΌΠ΅Π½ (namespace service providers), Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½ Π² Winsock. Π’Π°ΠΊΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ΡΡ ΠΊ Winsock Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ интСрфСйс ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² сСрвисов (service provider interface, SPI). Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ TSP рСгистрируСтся Π² Winsock, послСдний Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π½Π° Π΅Π³ΠΎ основС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ сокСта (Π²Ρ€ΠΎΠ΄Π΅ connect ΠΈ accepf) для Ρ‚Π΅Ρ… Ρ‚ΠΈΠΏΠΎΠ² адрСсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ этим ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠΌ ΠΊΠ°ΠΊ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅. Никаких ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ TSP Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π½Π΅ налагаСтся, Π½ΠΎ такая рСализация ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ взаимодСйствия с Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€ΠΎΠΌ транспорта Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ ядра.

Π’Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ ΠΊΠ»ΠΈΠ΅Π½Ρ‚-сСрвСрному ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΌΡƒ Winsock, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ: сСрвСр Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ свой адрСс доступным ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒΡΡ ΠΊ сСрвСру. Для стандартных сСрвисов, выполняСмых Π² TCP/IP, с этой Ρ†Π΅Π»ΡŒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ общСизвСстныС адрСса. Если Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π·Π½Π°Π΅Ρ‚ имя ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Web-сСрвСр, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π΅ΠΌΡƒ, ΡƒΠΊΠ°Π·Π°Π² общСизвСстный адрСс Web-сСрвСра (ΠΊ IP-адрСсу сСрвСра добавляСтся строка Β«:80Β» β€” Π½ΠΎΠΌΠ΅Ρ€ HTTP-ΠΏΠΎΡ€Ρ‚Π°). ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ пространств ΠΈΠΌΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ сСрвСрам Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ своС присутствиС ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ способами. НапримСр, ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ пространства ΠΈΠΌΠ΅Π½ ΠΌΠΎΠ³ Π±Ρ‹ Π½Π° сСрвСрной сторонС Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ адрСс сСрвСра Π² Active Directory, Π° Π½Π° клиСнтской β€” ΠΈΡΠΊΠ°Ρ‚ΡŒ Π΅Π³ΠΎ Π² Active Directory. ΠŸΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ пространств ΠΈΠΌΠ΅Π½ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‚ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Winsock, рСализуя Ρ‚Π°ΠΊΠΈΠ΅ стандартныС Winsock-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΈΠΌΠ΅Π½, ΠΊΠ°ΠΊ getaddrinfo (замСняСт gethostbyname) ΠΈ getnameinfo.


Π­ΠšΠ‘ΠŸΠ•Π Π˜ΠœΠ•ΠΠ’: просмотр ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² сСрвисов Winsock

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° Windows Sockets Configuration (Sporder.exe), входящая Π² Platform SDK, ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ зарСгистрированныС Π² Winsock ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Ρ‹ транспортных сСрвисов ΠΈ пространств ΠΈΠΌΠ΅Π½ ΠΈ позволяСт ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ порядок пСрСчислСния TSP НапримСр, Ссли Π² систСмС имССтся Π΄Π²Π° ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° транспортных сСрвисов TCP/IP, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π² спискС ΠΈΠ΄Π΅Ρ‚ TSP ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Winsock-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» TCP/IP. Ha ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΎΠΊΠ½ΠΎ Sporder, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ пСрСчислСны зарСгистрированныС TSP