ΠΠ° ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ°Π³Π΅ ΡΠΈΠΊΠ»Π° ΡΠΎΠ·Π΄Π°ΡΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΊΠ΅ΡΠΎΠ², Π² ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π²ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠ΅ΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. Π ΡΡΠΎΠΌ ΠΌΠ΅ΡΡΠ΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΡΠΎΠΏΡΡΠ΅Π½Π° Π²Π°ΠΆΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ 64-Ρ . ΠΡΠ»ΠΈ ΠΈΡ Π±ΡΠ΄Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅, ΡΠΎ ΠΏΠΎΠΏΡΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΡ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ FD_SET ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΡΡΠΈ ΡΠΎΠΊΠ΅ΡΡ Π²ΡΠΏΠ°Π΄ΡΡ ΠΈΠ· Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ, Ρ.Π΅. Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΡΠΎ-ΡΠΎ ΠΏΡΠΈΡΠ»Π΅Ρ, ΡΠ΅ΡΠ²Π΅Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ ΡΠ²ΠΈΠ΄ΠΈΡ. Π Π΅ΡΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ΅ΠΌΡ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ. Π‘Π°ΠΌΡΠΉ ΠΏΡΠΎΡΡΠΎΠΉ β ΡΡΠΎ ΠΎΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π² ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ Π»ΠΈΡΠ½ΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΡΠ°Π·Ρ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ·ΠΎΠ²Π° accept Π½ΡΠΆΠ½ΠΎ Π²ΡΠ·ΡΠ²Π°ΡΡ Π΄Π»Ρ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° closesocket. ΠΡΠΎΡΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± β ΡΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΠΊΠ΅ΡΠΎΠ² Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅, ΠΊΠ°ΠΊ ΡΡΠΎ Π±ΡΠ»ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΎ ΡΠ°Π½Π΅Π΅. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, Ρ ΠΎΡΡ Π΅ΡΠ»ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΈΡΠ»ΠΎ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΠΎΠ»ΡΡΠΈΠΌ, ΠΎΠ½Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΡΠ΅Π·Π°Π΅Ρ. Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΡΠΎΠΊΠ΅ΡΡ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΡΠΈΠΉ, Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠ·ΡΠ²Π°ΡΡ select ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ. ΠΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΉΡΠ°Ρ Π² ΡΡΠ½ΠΊΡΠΈΠΈ select ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅. ΠΡΠΈ ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠΈ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π½Π° ΠΏΠΎΡΡΠΈΠΈ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΈΠ·-Π·Π° ΠΎΡΡΡΡΡΡΠ²ΠΈΡ Π³ΠΎΡΠΎΠ²ΡΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π² ΠΏΠ΅ΡΠ²ΠΎΠΉ ΠΏΠΎΡΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ Π²ΡΠΎΡΠΎΠΉ ΠΏΠΎΡΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π³ΠΎΡΠΎΠ²ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π΅ΡΡΡ. ΠΡΠΈΠΌΠ΅Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π½Π° ΠΏΠΎΡΡΠΈΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅.
ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΎΠ½ΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΡΠΈΡΠ°Π΅ΡΡΡ, Π° ΠΏΠΎΡΠΎΠΌ Π² Π½Π΅Π³ΠΎ Π² ΡΠΈΠΊΠ»Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ ΡΠΎΠΊΠ΅ΡΡ. ΠΠ»Ρ Π»ΡΠ±ΠΈΡΠ΅Π»Π΅ΠΉ ΠΊΡΠ°ΡΠΊΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ Π΅ΡΡΡ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π°, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΌ Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΡΡΡΡ Π½ΠΈ ΡΠΈΠΊΠ»Ρ, Π½ΠΈ FD_ZERO, Π½ΠΈ FD_SET:
Move((PChar(Sockets) - 4)^, FDSet, Length(Sockets) * SizeOf(TSocket) + SizeOf(Integer));
ΠΠΎΡΠ΅ΠΌΡ ΡΠ°ΠΊΠ°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ, ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ, ΠΈΠ·ΡΡΠΈΠ² ΠΏΠΎ ΡΠΏΡΠ°Π²ΠΊΠ΅ Delphi, ΠΊΠ°ΠΊ Ρ ΡΠ°Π½ΡΡΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Ρ, Π° ΠΏΠΎ MSDN β ΡΡΡΡΠΊΡΡΡΡ ΡΠΈΠΏΠ° FDSET. Π’Π΅ΠΌ ΠΆΠ΅, ΠΊΡΠΎ ΠΏΠΎ ΠΊΠ°ΠΊΠΈΠΌ-ΡΠΎ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ Π½Π΅ Π·Π°Ρ ΠΎΡΠ΅Ρ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ, Π½Π°ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ Π½ΠΈΠΊΠΎΠ³Π΄Π° ΠΈ Π½ΠΈ ΠΏΡΠΈ ΠΊΠ°ΠΊΠΈΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π°Ρ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² Π½Π΅ΡΠΌΠ΅Π»ΡΡ ΡΡΠΊΠ°Ρ ΠΎΠ½Π° ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² ΠΌΠΈΠ½Ρ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, ΠΈΠ·-Π·Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π² ΡΠ°ΠΌΡΡ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΡ ΠΌΠ΅ΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΎΡΠΎΠΉ ΡΠ°Π³ β ΡΡΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠΊΠ΅ΡΠΎΠ² Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ select. ΠΠΎΡΠΎΠ²Π½ΠΎΡΡΡ ΠΊ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΠΊ ΡΡΠ΅Π½ΠΈΡ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π°Ρ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅ΠΌΡΡ Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° readfds. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½ΠΈΠΊΠ°ΠΊΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ, Π΅ΡΠ»ΠΈ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΊΠ΅Ρ Π½Π΅ Π³ΠΎΡΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΡΠΎΠΆΠ΅ ΡΠ°Π²Π΅Π½ nil, ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅, Π½Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠ΅ ΡΠ°ΠΉΠΌ-Π°ΡΡΠΎΠΌ.
Π’ΡΠ΅ΡΠΈΠΉ ΡΠ°Π³ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ select, Ρ.Π΅. ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΎΠΊΠ΅ΡΠΎΠ² Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ. ΠΠ° ΡΡΠΎΠΌ ΡΠ°Π³Π΅ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠΎΠΊΠ΅ΡΡ, ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΡΡ ΡΠΈΠΊΠ»Π° Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ accept. ΠΡΠΈ ΡΠΎΠΊΠ΅ΡΡ ΡΠ°ΡΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠΎΠΊΠ΅ΡΠΎΠ², Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 1. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π² ΡΠΈΠΊΠ»Π΅ ΠΏΡΠΎΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ ΠΈ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ΅Π½ΠΈΡ.
ΠΠ° ΠΏΠ΅ΡΠ²ΡΠΉ Π²Π·Π³Π»ΡΠ΄ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΡΡΠ°Π½Π½ΡΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π±ΠΎΡΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ±ΡΠ°Π½ ΡΠΈΠΊΠ» while, Π° Π½Π΅ for. ΠΠΎ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° ΠΌΠΎΠΆΠ΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ. ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ ΠΆΠ΅ ΡΠΈΠΊΠ»Π° for Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΅Π³ΠΎ Π³ΡΠ°Π½ΠΈΡΡ Π²ΡΡΠΈΡΠ»ΡΡΡΡΡ ΠΎΠ΄ΠΈΠ½ ΡΠ°Π· ΠΈ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΡΠ΅ΠΉΠΊΠ°Ρ ΠΏΠ°ΠΌΡΡΠΈ, ΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ, Π·Π°Π΄Π°ΡΡΠΈΡ ΡΡΠΈ Π³ΡΠ°Π½ΠΈΡΡ, Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠΈ Π³ΡΠ°Π½ΠΈΡΡ. Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΈΠΊΠ» for Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ Π½Π° ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΡΠΌΠ΅Π½ΡΡΠΈΠ²ΡΠ΅ΠΉΡΡ Π΄Π»ΠΈΠ½Π΅, Π° ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΆΠ΅ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ, ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΡΡΠ΄Π½ΠΎ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡΠΌ. ΠΠΎΡΡΠΎΠΌΡ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅Π΅ ΡΠΈΠΊΠ» while, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° Π·Π°Π½ΠΎΠ²ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΅Π³ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ.
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ select ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΠ΅ Π΅ΠΉ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ Π² Π½ΠΈΡ ΠΎΡΡΠ°ΡΡΡΡ Π»ΠΈΡΡ ΡΠΎΠΊΠ΅ΡΡ, Π½Π°Ρ ΠΎΠ΄ΡΡΠΈΠ΅ΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ. ΠΠΎΡΡΠΎΠΌΡ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π³ΠΎΡΠΎΠ² Π»ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Ρ, Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ FD_ISSET ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π²Ρ ΠΎΠ΄ΠΈΡ Π»ΠΈ ΠΎΠ½ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ FDSet. ΠΡΠ»ΠΈ Π²Ρ ΠΎΠ΄ΠΈΡ, ΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΡ recv. ΠΡΠ»ΠΈ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π·Π½Π°ΡΠΈΡ, Π΄Π°Π½Π½ΡΠ΅ Π² Π±ΡΡΠ΅ΡΠ΅ Π΅ΡΡΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡ ΡΠΈΡΠ°Π΅Ρ ΠΈ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ. ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ 0 ΠΈΠ»ΠΈ -1 (SOCKET_ERROR) Π·Π½Π°ΡΠΈΡ, ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΡΡΡΠΎ ΠΈΠ»ΠΈ ΡΠ°Π·ΠΎΡΠ²Π°Π½ΠΎ, ΠΈ Π΄Π°Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½. ΠΠΎΡΡΠΎΠΌΡ ΠΌΡ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌ ΡΠ΅ΡΡΡΡΡ (closesocket) ΠΈ ΡΠ±ΡΠ°ΡΡ Π΅Π³ΠΎ ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΠΊΠ΅ΡΠΎΠ² (ΠΊΠ°ΠΊ ΡΠ°Π· Π½Π° ΡΡΠΎΠΌ ΡΠ°Π³Π΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ). ΠΡΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠΈ ΠΎΡΡΠ°Π²ΡΠΈΠ΅ΡΡ ΡΠΎΠΊΠ΅ΡΡ ΡΠΌΠ΅ΡΠ°ΡΡΡΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²Π»Π΅Π²ΠΎ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΠΊΠ»Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΠΈΠ½Π°ΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΎΠΊΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΏΡΡΠ΅Π½.
Π Π½Π°ΠΊΠΎΠ½Π΅Ρ, Π½Π° ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠΌ ΡΠ°Π³Π΅ ΠΌΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΡΠ°Π½ΠΈΡΡΡ Π² Π½ΡΠ»Π΅Π²ΠΎΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π°. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎΡ ΡΠΎΠΊΠ΅Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, Π΄Π»Ρ Π½Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π² ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, ΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ accept, ΡΡΠΎΠ±Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΎΠΊΠ΅ΡΡ Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ ΡΡΠΈΠΌΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌΠΈ.
Π₯ΠΎΡΡ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΠΏΠΎΠ»Π½Π΅ ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π΅Π½, ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°. Π’Π°ΠΊ ΡΡΠΎ Π»ΡΡΡΠ΅ Π½Π΅ ΠΎΡΠ½ΠΎΡΠΈΡΡΡΡ ΠΊ Π½Π΅ΠΌΡ ΠΊΠ°ΠΊ ΠΊ Π΄ΠΎΠ³ΠΌΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² Π²Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΡΡΠΈΡΠ΅Π»ΡΠ½Π΅Π΅ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. Π¦Π΅Π½Π½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ select, Π° Π½Π΅ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΎΠ½ Π΄Π°Π΅Ρ Π³ΠΎΡΠΎΠ²ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π½Π° Π²ΡΠ΅ ΡΠ»ΡΡΠ°ΠΈ ΠΆΠΈΠ·Π½ΠΈ.
2.1.14. ΠΡΠΈΠΌΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ select
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π΄Π²Π° ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ select Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠΊΠ΅ΡΠ°. ΠΠ±Π° ΠΏΡΠΈΠΌΠ΅ΡΠ° ΡΡΠ°Π½ΡΡ ΡΠ°Π·Π²ΠΈΡΠΈΠ΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅.
Π‘Π½Π°ΡΠ°Π»Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠ΅ΠΌ UDP-ΡΠ°Ρ (ΡΠΌ. ΡΠ°Π·Π΄. 2.1.10) ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΊΠ΅Ρ ΠΈ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ, ΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ (ΠΏΡΠΈΠΌΠ΅Ρ SelectChat Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠ΅). ΠΡΠΎΡΠ°Ρ Π½ΠΈΡΡ Π½Π°ΠΌ ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ, Π²ΡΡ Π±ΡΠ΄Π΅Ρ Π΄Π΅Π»Π°ΡΡ Π³Π»Π°Π²Π½Π°Ρ ΡΠΎΡΠΌΠ°. ΠΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅ΡΠ° ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Π½Π΅ ΠΏΡΠ΅ΡΠ΅ΡΠΏΠ΅Π»ΠΈ, Π³Π»Π°Π²Π½ΠΎΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ β ΡΡΠΎ ΡΠΎ, ΡΡΠΎ Π½Π° ΡΠΎΡΠΌΠ΅ ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ, Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ΅ ΡΠΎΠ±ΡΡΠΈΡ OnTimer ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ select, ΠΏΡΠΈΡΠ»ΠΎ Π»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΡΠΎΠΊΠ΅ΡΠ° (Π»ΠΈΡΡΠΈΠ½Π³ 2.24). Π‘ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΉ ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠ°Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π±Π΅Π· ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΠ΅Π³ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΊΠ΅Ρ. Π Π°Π±ΠΎΡΠ°ΡΡ Ρ ΡΠ°ΠΊΠΈΠΌ ΡΠ°ΡΠΎΠΌ ΡΡΠ°Π»ΠΎ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΡΠ²Π΅Ρ Π½ΡΠΆΠ½ΠΎ ΠΏΠΎΡΡΠ»Π°ΡΡ Π½Π° ΡΠΎΡ ΠΆΠ΅ ΠΏΠΎΡΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅, Π° Π½Π΅ Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΡ Π΄Π»Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΊΠ°ΠΊΠΎΠΌΡ ΠΈΠ· ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΡΠ°ΡΠ° ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ UDP-ΡΠ°ΡΠ° ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°ΡΡΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠΎ ΡΡΠ°ΡΠΎΠΉ, Ρ.ΠΊ. ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΎΠ±ΠΌΠ΅Π½Π° ΠΎΡΡΠ°Π»ΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ.
ΠΠΈΡΡΠΈΠ½Π³ 2.24. ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠΊΠ΅ΡΠΎΠ² ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΎΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°// Π Π΅Π°ΠΊΡΠΈΡ Π½Π° ΡΠ°ΠΉΠΌΠ΅Ρ. Π‘ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ½ΠΎΡΡΡΡ, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠ°ΠΉΠΌΠ΅ΡΠΎΠΌ,
// ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, Π½Π΅ ΠΏΡΠΈΡΠ»ΠΈ Π»ΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΈ Π΅ΡΠ»ΠΈ ΠΏΡΠΈΡΠ»ΠΈ,
// ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΡ .
procedure TChatForm.TimerChatTimer(Sender: TObject);
var
// ΠΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ select.
// ΠΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠΎΠΊΠ΅Ρ FSocket.
SocketSet: TFDSet;
// Π’Π°ΠΉΠΌ-Π°ΡΡ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ select
Timeout: TTimeVal;
// ΠΡΡΠ΅Ρ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ.
// Π Π°Π·ΠΌΠ΅Ρ ΡΠ°Π²Π΅Π½ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ UDP-Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ
Buffer: array[0..65506] of Byte;
Msg: string;
// ΠΠ΄ΡΠ΅Ρ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΡΠ»ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅
RecvAddr: TSockAddr;
RecvLen, AddrLen: Integer;
begin
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΊΠ΅ΡΠΎΠ²,
// Ρ.Π΅. ΠΎΡΠΈΡΠ°Π΅ΠΌ Π΅Π³ΠΎ ΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΠΎΠ³ΠΎ ΠΌΡΡΠΎΡΠ°
FD_ZERO(SocketSet);
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΡΡΠΎ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΡΠΎΠΊΠ΅Ρ FSocket
FD_SET(FSocket, SocketSet);
// Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ°ΠΉΠΌ-Π°ΡΡ ΡΠ°Π²Π½ΡΠΌ Π½ΡΠ»Ρ, ΡΡΠΎΠ±Ρ
// ΡΡΠ½ΠΊΡΠΈΡ select Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΆΠ΄Π°Π»Π°, Π° Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π»Π°
// Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π°.
Timeout.tv_sec := 0;
Timeout.tv_usec := 0;
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΡ ΡΠΎΠΊΠ΅ΡΠ° Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ
if select(0, @SocketSet, nil, nil, @Timout) = SOCKET_ERROR then
begin
AddMessageToLog('ΠΡΠΈΠ±ΠΊΠ° ΠΏΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠΊΠ΅ΡΠ°: ' + GetErrorString);
Exit;
end;
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΠΎΡΡΠ°Π²ΠΈΠ»Π° Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ select ΡΠΎΠΊΠ΅Ρ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π΅.
//ΠΡΠ»ΠΈ ΠΎΡΡΠ°Π²ΠΈΠ»Π°, Π·Π½Π°ΡΠΈΡ, Π²ΠΎ Π²Ρ ΠΎΠ΄Π½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ ΡΠΎΠΊΠ΅ΡΠ° Π΅ΡΡΡ Π΄Π°Π½Π½ΡΠ΅.
if FD_ISSET(FSocket, SocketSet) then
begin
AddrLen := SizeOf(RecvAddr); // ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ
RecvLen :=
recvfrom(FSocket, Buffer, SizeOf(Buffer), 0, RecvAddr, AddrLen);
// Π’Π°ΠΊ ΠΊΠ°ΠΊ UDP Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅, ΠΎΡΠΈΠ±ΠΊΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ recvfrom