Π€ΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ»Ρ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈ SOCKET_ERROR β ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅.
ΠΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°ΠΌΠΈ ΡΡΠ΅ΠΊΠ° TCP/IP, ΡΡΠ°ΡΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ΄ΠΎΠ±Π½Π΅Π΅ Π½ΠΎΠ²ΡΡ , ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΡ . ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°Π²ΠΎΠ΄ΠΈΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½Ρ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π΅Π΄ΠΈΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°ΠΌΠΈ. ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΡ ΠΌΡ Π·Π΄Π΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ ΠΏΡΡΠΌΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΎΠ² ΡΡΠ΅Π΄ΠΈ ΡΡΠ°ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΠ½Π° WSADuplicateSocket ΠΈ ΡΠ»ΡΠΆΠΈΡ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠΎΠΊΠ΅ΡΠ° Π² Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΡΠΎΡΠΎΡΠΈΠΏ ΡΡΠ½ΠΊΡΠΈΠΈ WSADuplicateSocket ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² Π»ΠΈΡΡΠΈΠ½Π³Π΅ 2.47.
ΠΠΈΡΡΠΈΠ½Π³ 2.47. Π€ΡΠ½ΠΊΡΠΈΡ WSADuplicateSocket// ***** ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° C++ *****
int WSADuplicateSocket(SOCKET s, DWORD dwProcessId, LPWSAPROTOCOL_INFO lpProtocolInfo);
// ***** ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Delphi *****
function WSADuplicateSocket(S: TSocket; dwProcessID: DWORD; var ProtocolInfo: TWSAProtocolInfo): Integer;
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ S Π·Π°Π΄Π°Π΅Ρ ΡΠΎΠΊΠ΅Ρ, Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π½ΡΠΆΠ½ΠΎ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ dwProcessID β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π° ΠΊΠΎΠΏΠΈΡ, ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π² ΡΡΡΡΠΊΡΡΡΡ ProtocolInfo ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΊΠΎΠΏΠΈΠΈ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ. ΠΠ°ΡΠ΅ΠΌ ΡΡΠ° ΡΡΡΡΠΊΡΡΡΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π° Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π΅ Π² ΡΡΠ½ΠΊΡΠΈΡ WSASocket ΠΈ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ²ΠΎΡ ΠΊΠΎΠΏΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π΄Π°Π½Π½ΡΠΌ ΡΠΎΠΊΠ΅ΡΠΎΠΌ.
Π€ΡΠ½ΠΊΡΠΈΡ WSADuplicateSocket Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ»Ρ ΠΏΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΠΈ SOCKET_ERROR β Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ°ΠΊ ΠΌΡ ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠΎΠΊΠ΅Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ, Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΡΡΡΡΠΊΡΡΡΠ° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠΊΡΡΡΠΎΠΉ ΠΎΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅ΠΉ Π΅Π³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΡΠΎΠΊΠ΅ΡΠ° β Π½Π΅ΠΊΠΎΡΠΎΡΡΠΌ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΌ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°. Π€ΡΠ½ΠΊΡΠΈΡ WSADuplicateSocket ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π½ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ Π΄Π»Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°. Π‘ΡΠ°ΡΡΠΉ ΠΈ Π½ΠΎΠ²ΡΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΠ°Π²Π½ΠΎΠΏΡΠ°Π²Π½ΡΠΌΠΈ. Π§ΡΠΎΠ±Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΠΎΠΊΠ΅Ρ, Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΊΡΡΡΡ Π²ΡΠ΅ Π΅Π³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ closesocket. ΠΡΠ»ΠΈ Π²ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΡΠ΅Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΏΠΎΡΡΡΠΏΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅, ΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΡ ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠ΅ΡΠ²ΠΎΠΉ Π²ΡΠ·ΠΎΠ²Π΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΡ ΡΠ°Π±ΠΎΡΡ. MSDN ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ ΡΠ°ΠΊΡΡ ΡΡ Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠΊΠ΅Ρ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΠΎΠΊΠ΅Ρ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΡΠ΅ΡΠ΅Π· Π½Π΅Π³ΠΎ Π²Π²ΠΎΠ΄-Π²ΡΠ²ΠΎΠ΄. ΠΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΈ ΡΡΠΎΠΌ Π·Π°ΠΊΡΡΠ²Π°Π΅Ρ ΡΠ²ΠΎΠΉ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ. Π’Π°ΠΊΠΎΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡΡΠΈΠ΅ ΠΏΡΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΌ Π΄ΠΎΡΡΡΠΏΠ΅ ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΎΠΊΠ΅ΡΡ.
ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ WSADuplicateSocket ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. Π Π°Π·Π½ΡΠ΅ Π½ΠΈΡΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ° Π½Π΅ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Ρ.ΠΊ., Π½Π°Ρ ΠΎΠ΄ΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΌ Π°Π΄ΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅, ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ.
2.2.5. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ
ΠΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΡΠ°Π½ΡΡΠ΅, ΡΠ²Π»ΡΠ»ΠΈΡΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ°Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΡ, Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠ°ΠΌΠ° Π²ΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠ΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ, ΠΏΡΠΈΡΠ»ΠΈ Π»ΠΈ Π΄Π°Π½Π½ΡΠ΅, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° Π»ΠΈ ΡΠ²ΡΠ·Ρ ΠΈ Ρ.ΠΏ. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎ ΡΠΎΠ±ΡΡΠΈΡΡ , ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡΠΈΡ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ: ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ , ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ ΠΌΠ΅ΡΡΠ° Π² Π±ΡΡΠ΅ΡΠ΅, Π·Π°ΠΊΡΡΡΠΈΠΈ ΠΈ Ρ.ΠΏ. Π’Π°ΠΊΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°Π±ΠΎΡΡ Π»ΡΡΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ ΡΠΎΠ±ΡΡΠΈΠΉΠ½ΠΎ-ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠΈΠΏΠΈΡΠ½ΡΡ Π΄Π»Ρ Windows. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π²ΠΏΠ΅ΡΠ²ΡΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ Π² WinSock 1 ΠΈ Π±ΡΠ»Π° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΠΈΡΡ ΠΎΠΊΠΎΠ½Π½ΡΠΌΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°ΠΌΠΈ. Π WinSock 2 ΡΡΠΎΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΎΡΡΠ°Π»ΡΡ Π±Π΅Π· ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΠΊΠ°ΠΊΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠΌΡ ΠΎΠΊΠ½Ρ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΡΠΎΠ±ΡΡΠΈΡ Π½Π° ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠ΅ΠΌ Π΅Π³ΠΎ ΡΠΎΠΊΠ΅ΡΠ΅.
ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ΅ΡΠ΅Π· ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ WSAAsyncSelect, ΠΈΠΌΠ΅ΡΡΠ΅ΠΉ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ:
function WSAAsyncSelect(S: TSocket; HWindow: HWND; wMsg: u_int; lEvent: LongInt): Integer;
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ S ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΡΠΎΠΊΠ΅Ρ, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ ΡΠ°Π±ΠΎΡΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ HWindow β Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄ΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, wMsg β ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, a lEvent Π·Π°Π΄Π°Π΅Ρ ΡΠΎΠ±ΡΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Ρ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡ ΠΊΠΎΡΠΎΡΡΡ Π·Π°Π΄Π°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΠ±ΡΡΠΈΡ. ΠΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ Π·Π΄Π΅ΡΡ Π²ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΠΌΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΡΠ°ΠΌΡΡ Π³Π»Π°Π²Π½ΡΡ (ΡΠ°Π±Π». 2.2).
Π’Π°Π±Π»ΠΈΡΠ° 2.2. ΠΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΡΠΎΠ±ΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠ°
Π‘ΠΎΠ±ΡΡΠΈΠ΅ ΠΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ FD_READ Π‘ΠΎΠΊΠ΅Ρ Π³ΠΎΡΠΎΠ² ΠΊ ΡΡΠ΅Π½ΠΈΡ FD_WRITE Π‘ΠΎΠΊΠ΅Ρ Π³ΠΎΡΠΎΠ² ΠΊ Π·Π°ΠΏΠΈΡΠΈ FD_ACCEPT Π ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠΊΠ΅ΡΠ° Π΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠΊΠ΅ΡΠΎΠ², Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ) FD_CONNECT Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΎ (ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠΎΠΊΠ΅ΡΠΎΠ², Π΄Π»Ρ ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ connect ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Π°Ρ Π΅ΠΉ) FD_CLOSE Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΎΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² WSAAsyncSelect Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΎΠΊΠ΅ΡΠ° ΠΎΡΠΌΠ΅Π½ΡΠ΅Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ². Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° ΡΠΎΡΠΌΠ° Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠ΅ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡ ΡΠΎΠΊΠ΅ΡΠ° ΠΊ ΡΡΠ΅Π½ΠΈΡ, Π° Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡ ΠΊ Π·Π°ΠΏΠΈΡΠΈ Π½Π΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (Π»ΠΈΡΡΠΈΠ½Π³ 2.48).
ΠΠΈΡΡΠΈΠ½Π³ 2.48. ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΈ WSAAsyncSelectWSAAsyncSelect(S, Form1.Handle, WM_USER, FD_WRITE);
// ΠΡΠΎΡΠΎΠΉ Π²ΡΠ·ΠΎΠ² ΠΎΡΠΌΠ΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ
WSAAsyncSelect(S, Form1.Handle, WM_USER, FD_READ);
// Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠΊΠ½ΠΎ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π°ΠΏΠΈΡΠΈ
WSAAsyncSelect ΡΠ²ΡΠ·ΡΠ²Π°Π΅Ρ Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠΊΠ΅Ρ, Π° Π½Π΅ Π΅Π³ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π΄Π²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΊΠ΅Ρ (ΠΊΠΎΠΏΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ»Π° ΡΠΎΠ·Π΄Π°Π½Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ WSADuplicateSocket), ΠΈ ΠΏΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π²ΡΠ·ΡΠ²Π°Π΅Ρ WSAAsyncSelect ΡΠΎ ΡΠ²ΠΎΠΈΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠΎΡΠ°Ρ β ΡΠΎ ΡΠ²ΠΎΠΈΠΌ, ΡΠΎ Π²ΡΠ·ΠΎΠ² WSAAsyncSelect, ΡΠ΄Π΅Π»Π°Π½Π½ΡΠΉ Π²ΠΎ Π²ΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΎΡΠΌΠ΅Π½ΠΈΡ Π²ΡΠ·ΠΎΠ², ΡΠ΄Π΅Π»Π°Π½Π½ΡΠΉ Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΏΡΠΈ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠΊΠ΅ΡΠ° ΠΊΠ°ΠΊ ΠΊ ΡΡΠ΅Π½ΠΈΡ, ΡΠ°ΠΊ ΠΈ ΠΊ Π·Π°ΠΏΠΈΡΠΈ, Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄.
WSAAsyncSelect(S, Form1.Handle, WM_USER, FD_READ or FD_WRITE);
ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ or ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡΠΎΠ²Π°ΡΡ ΠΈ Π±ΠΎΠ»ΡΡΠ΅Π΅ ΡΠΈΡΠ»ΠΎ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ.
ΠΠ· ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΡΠΎ Π½Π΅Π»ΡΠ·Ρ ΡΠ²ΡΠ·Π°ΡΡ Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠΎΠΊΠ΅ΡΠ° ΡΠ°Π·Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ (ΠΈΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π½ΡΠΌ ΠΎΠΊΠ½Π°ΠΌ), Ρ.ΠΊ. ΠΏΡΠΈ ΠΎΠ΄Π½ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ WSAAsyncSelect ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΠΎΠΊΠ½Π° ΠΈ ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠΌΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ Π²ΡΠ·ΠΎΠ² ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ, Ρ Π΄ΡΡΠ³ΠΈΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠΌ ΠΈ/ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠΌ, ΠΎΡΠΌΠ΅Π½ΠΈΡ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ. Π€ΡΠ½ΠΊΡΠΈΡ WSAAsyncSelect ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡ ΡΠΎΠΊΠ΅Ρ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ. ΠΡΠ»ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Π² Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° WSAAsyncSelect ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ Π΅Π³ΠΎ Π² ΡΡΠΎΡ ΡΠ΅ΠΆΠΈΠΌ Π²ΡΡΡΠ½ΡΡ.
Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ ΡΠΎΠΊΠ΅ΡΠΎΠΌ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΠ±ΡΠΌ. ΠΠ±ΡΡΠ½ΠΎ Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΎΡ WM_USER ΠΈ Π²ΡΡΠ΅, ΡΡΠΎΠ±Ρ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΡΠ°Π½ΠΈΡΡ ΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ.
ΠΡΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ wParam ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΎΠΊΠ΅ΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅. ΠΠ»Π°Π΄ΡΠ΅Π΅ ΡΠ»ΠΎΠ²ΠΎ lParam ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ΅Π΄ΡΠ΅Π΅ ΡΠΎΠ±ΡΡΠΈΠ΅ (ΠΎΠ΄Π½Ρ ΠΈΠ· ΠΊΠΎΠ½ΡΡΠ°Π½Ρ FD_XXX), Π° ΡΡΠ°ΡΡΠ΅Π΅ ΡΠ»ΠΎΠ²ΠΎ β ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½Π° ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π°. ΠΠ»Ρ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ΄Π° ΡΠΎΠ±ΡΡΠΈΡ ΠΈ ΠΊΠΎΠ΄Π° ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈΠ· lParam Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ WinSock ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅Π½Ρ ΠΌΠ°ΠΊΡΠΎΡΡ WSAGETSELECTEVENT ΠΈ WSAGETSELECTERROR ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. Π ΠΌΠΎΠ΄ΡΠ»Π΅ WinSock ΠΎΠ½ΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ WSAGetSelectEvent ΠΈ WSAGetSelectError. ΠΠ΄Π½ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ ΡΠΎΠ±ΡΡΠΈΠΈ Π½Π° ΡΠΎΠΊΠ΅ΡΠ΅. ΠΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ, Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΊΠ½Π° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ.
Π‘ΠΎΠΊΠ΅Ρ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ accept, Π½Π°ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠ΅ΠΆΠΈΠΌ ΡΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΡΠ» ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΅ΡΠ»ΠΈ ΡΠΎΠΊΠ΅Ρ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠΉΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ, ΡΠΎ ΠΈ ΡΠΎΠΊΠ΅Ρ, ΠΏΠΎΡΠΎΠΆΠ΄Π΅Π½Π½ΡΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ accept, Π±ΡΠ΄Π΅Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ, ΠΈ ΡΠΎΡ ΠΆΠ΅ Π½Π°Π±ΠΎΡ Π΅Π³ΠΎ ΡΠΎΠ±ΡΡΠΈΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ²ΡΠ·Π°Π½ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ΠΌ, ΡΡΠΎ ΠΈ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ ΠΈΠ· ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½ΡΡ ΡΠΎΠ±ΡΡΠΈΠΉ.
Π‘ΠΎΠ±ΡΡΠΈΠ΅ FD_READ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π²ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΡΠ΅Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΏΠΎΡΡΡΠΏΠ°ΡΡ Π΄Π°Π½Π½ΡΠ΅ (Π΅ΡΠ»ΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° WSAAsyncSelect, ΡΠ°Π·ΡΠ΅ΡΠ°ΡΡΠ΅Π³ΠΎ ΡΠ°ΠΊΠΈΠ΅ ΡΠΎΠ±ΡΡΠΈΡ, Π² Π±ΡΡΠ΅ΡΠ΅ ΡΠΎΠΊΠ΅ΡΠ° ΡΠΆΠ΅ Π΅ΡΡΡ Π΄Π°Π½Π½ΡΠ΅, ΡΠΎ ΡΠΎΠ±ΡΡΠΈΠ΅ ΡΠ°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ). ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΊΠ½Π°, Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠ°ΠΊΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ, Ρ.Π΅. ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½ΠΎΠ²ΡΡ Π΄Π°Π½Π½ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌΠΈ ΡΠΎΠ±ΡΡΠΈΡΠΌΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° ΠΈΠ»ΠΈ Ρ ΡΠΎΠ±ΡΡΠΈΠ΅ΠΌ FD_READ Π΄ΡΡΠ³ΠΈΡ ΡΠΎΠΊΠ΅ΡΠΎΠ², Π±ΡΠ΄ΡΡ ΠΏΠΎ-ΠΏΡΠ΅ΠΆΠ½Π΅ΠΌΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΎΠΊΠ½Π°). ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΡΠ½ΠΎΠ²Π° ΡΠ°Π·ΡΠ΅ΡΠ°Π΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π° ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π±ΡΡΠ΅ΡΠ° ΡΠΎΠΊΠ΅ΡΠ° (ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ recv, recvfrom, WSARecv ΠΈΠ»ΠΈ WSARecvFrom, ΠΌΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π±ΡΠ΄Π΅ΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈ recv, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ Π² ΡΡΠΎΠΌ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ).