ΠΡΠΈ Π·Π°Π΄Π°Π½ΠΈΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ° FIONBIO ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ arg ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ. ΠΡΠ»ΠΈ Π΅Π³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ, ΡΠΎΠΊΠ΅Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½ Π² Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ, Π΅ΡΠ»ΠΈ Π½Π΅ ΡΠ°Π²Π½ΠΎ Π½ΡΠ»Ρ β Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΎΠΊΠ΅Ρ s Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ, Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ (Π»ΠΈΡΡΠΈΠ½Π³ 2.28).
ΠΠΈΡΡΠΈΠ½Π³ 2.28. ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΠΎΠΊΠ΅ΡΠ° Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌvar
S: TSocket;
Arg: u_long;
begin
...
Arg := 1;
ioctlsocket(S, FIONBIO, Arg);
ΠΠΎΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ (Π° Π½Π΅ ΡΠΎΠΊΠ΅ΡΡ Windows), ΡΠΎΠΊΠ΅Ρ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π²Π΅Π΄Π΅Π½ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ. ΠΠ΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΌ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π΅Π»Π°Π½ Π»ΡΠ±ΠΎΠΉ ΡΠΎΠΊΠ΅Ρ (ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ) Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°.
Π€ΡΠ½ΠΊΡΠΈΡ ioctlsocket Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΡΠ»Π΅Π²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π° ΠΈ Π½Π΅Π½ΡΠ»Π΅Π²ΠΎΠ΅ β ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΠΊΠ°ΠΊ Π²ΡΠ΅Π³Π΄Π°, ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Π΄Π»Ρ ΠΊΡΠ°ΡΠΊΠΎΡΡΠΈ ΠΎΠΏΡΡΠ΅Π½Π°.
ΠΡΠ°ΠΊ, ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΎΠΊΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. Π‘ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌΠΈ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ accept, connect, recv ΠΈ send Π² ΡΡΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΠΌΡ ΡΠΆΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ. Π’Π΅ΠΏΠ΅ΡΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎ, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ Π²Π΅Π΄ΡΡ ΡΠ΅Π±Ρ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠΌΠ½ΠΈΠΌ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΡΡΡ Π²ΡΠ·Π²Π°Π²ΡΡΡ ΠΈΡ Π½ΠΈΡΡ.
β‘ accept β Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π½ΠΈΡΡ, Π΅ΡΠ»ΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π΅Π΅ Π²ΡΠ·ΠΎΠ²Π° ΠΎΡΠ΅ΡΠ΅Π΄Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΏΡΡΡΠ°.
β‘ connect β Π² ΡΠ»ΡΡΠ°Π΅ TCP Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΡΠΎΠΊΠ΅Ρ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ΅Π³Π΄Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·ΠΈ Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΌ ΡΠΎΠΊΠ΅ΡΠΎΠΌ. ΠΠ΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ·ΠΎΠ² connect Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΠΊΠ°ΠΊΠ°Ρ-Π»ΠΈΠ±ΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Π½Π΅ Π΄Π°Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΏΡΠΈΡΡΡΠΏΠΈΡΡ ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠ²ΡΠ·ΠΈ. Π’Π°ΠΊΠΆΠ΅ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΡ connect Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ UDP, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΡΠΈΠ»ΡΡΡ Π΄Π»Ρ Π°Π΄ΡΠ΅ΡΠΎΠ².
β‘ recv β Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π½ΠΈΡΡ, Π΅ΡΠ»ΠΈ Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ·ΠΎΠ²Π° Π²Ρ ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΡΠ΅Ρ ΡΠΎΠΊΠ΅ΡΠ° ΠΏΡΡΡ.
β‘ send β Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π½ΠΈΡΡ, Π΅ΡΠ»ΠΈ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ ΡΠΎΠΊΠ΅ΡΠ° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΌΠ΅ΡΡΠ°, ΡΡΠΎΠ±Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ΄Π° ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΡΠ»ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½Ρ, ΡΠΎ ΠΈΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ. ΠΡΠ»ΠΈ ΠΆΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ . Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»Π° Π»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° ΠΈΠ·-Π·Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ»ΠΈ ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π΅ΡΠ΅. ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ WSAGetLastError. ΠΡΠ»ΠΈ ΠΎΠ½Π° Π²Π΅ΡΠ½Π΅Ρ WSAEWOULDBLOCK, Π·Π½Π°ΡΠΈΡ, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ Π±ΡΠ»ΠΎ, Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠ°ΠΊΡΡΠ²Π°ΡΡ ΡΠΎΠΊΠ΅Ρ ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠ»Π΅ WSAEWOULDBLOCK, ΡΠ°Π·ΡΠΌΠ΅Π΅ΡΡΡ, Π½Π΅ Π½ΡΠΆΠ½ΠΎ, Ρ.ΠΊ. ΠΎΡΠΈΠ±ΠΊΠΈ Π½Π΅ Π±ΡΠ»ΠΎ, ΠΈ ΡΠ²ΡΠ·Ρ (Π² ΡΠ»ΡΡΠ°Π΅ TCP) ΠΎΡΡΠ°Π»Π°ΡΡ Π½Π΅ΡΠ°Π·ΠΎΡΠ²Π°Π½Π½ΠΎΠΉ.
Π‘Π»Π΅Π΄ΡΠ΅Ρ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΈ Π½ΡΠ»Π΅Π²ΠΎΠΌ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ ΡΠΎΠΊΠ΅ΡΠ° (Ρ.Π΅. ΠΊΠΎΠ³Π΄Π° ΡΡΠ½ΠΊΡΠΈΡ send ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π½Π°ΠΏΡΡΠΌΡΡ Π² ΡΠ΅ΡΡ) ΠΈ Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΌΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΡ send ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ, Ρ.ΠΊ. ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ, ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΡΡ ΡΠ°ΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° TCP ΠΏΠΎΠ»ΡΡΠ°ΡΡΡΡ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ. ΠΠΎ ΡΡΠ° Π·Π°Π΄Π΅ΡΠΆΠΊΠ° Π½Π΅ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΈ Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ send Π±ΡΠ΄Π΅Ρ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ Π²Π΅ΡΡΠΈ ΡΠ΅Π±Ρ Ρ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΌΠΈ ΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΌΠΈ ΡΠΎΠΊΠ΅ΡΠ°ΠΌΠΈ, Ρ.Π΅. Π²Π΅ΡΠ½Π΅Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΎΠΊΠ°ΠΆΡΡΡΡ Π² ΡΠ΅ΡΠΈ.
ΠΠ»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ accept, recv ΠΈ send WSAEWOULDBLOCK ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ²ΡΠΎΡΠΈΡΡ ΡΠ΅ΡΠ΅Π· Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΈ, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ, Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠ°Π· ΠΎΠ½Π° Π½Π΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π°. Π€ΡΠ½ΠΊΡΠΈΡ connect Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠΎΠ½ΠΎΠ²ΡΡ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. Π Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠΈ ΡΡΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠ΄ΠΈΡΡ ΠΏΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠΊΠ΅ΡΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ select. ΠΠΈΡΡΠΈΠ½Π³ 2.29 ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΡΠΎ.
ΠΠΈΡΡΠΈΠ½Π³ 2.29. Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ²ΡΠ·ΠΈ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°var
S: TSocket;
Block: u_long;
SetW, SetE: TFDSet;
begin
S :=socket(AF_INET, SOCK_STREAM, 0);
...
Block := 1;
ioctlsocket(S, FIONBIO, Block);
connect(S, ...);
if WSAGetLastError <> WSAEWOULDBLOCK then
begin
// ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°
raise ...
end;
FD_ZERO(SetW);
FD_SET(S, SetW);
FD_ZERO(SetE);
FD_SET(S, SetE);
select(0, nil, @SetW, @SetE, nil);
if FD_ISSET(S, SetW) then
// Connect Π²ΡΠΏΠΎΠ»Π½Π΅Π½ ΡΡΠΏΠ΅ΡΠ½ΠΎ
else if FD_ISSET(S, SetE) then
// Π‘ΠΎΠ΅Π΄ΠΈΠ½ΠΈΡΡΡΡ Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ
else
// ΠΡΠΎΠΈΠ·ΠΎΡΠ»Π° Π΅ΡΠ΅ ΠΊΠ°ΠΊΠ°Ρ-ΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ°
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΡΠΎΠΊΠ΅Ρ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ SetW, Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΠ°ΡΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½, Π° Π² Π΅Π³ΠΎ Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ Π΅ΡΡΡ ΠΌΠ΅ΡΡΠΎ. Π‘ΠΎΠΊΠ΅Ρ, Π²Ρ ΠΎΠ΄ΡΡΠΈΠΉ Π² ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ SetE, Π±ΡΠ΄Π΅Ρ ΡΡΠΈΡΠ°ΡΡΡΡ Π³ΠΎΡΠΎΠ²ΡΠΌ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠΏΡΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ ΡΠ΄Π°Π»Π°ΡΡ. ΠΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΏΠΎΠΏΡΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ Π·Π°Π²Π΅ΡΡΠΈΠ»Π°ΡΡ (ΡΡΠΏΠ΅Ρ ΠΎΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠ΄Π°ΡΠ΅ΠΉ), Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ select Π·Π°Π²Π΅ΡΡΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΠΎΠΏΡΡΠΊΠ° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ, ΠΈ ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°Ρ ΡΡΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΡΠ΄ΠΈΡΡ ΠΏΠΎ ΡΠΎΠΌΡ, Π² ΠΊΠ°ΠΊΠΎΠ΅ ΠΈΠ· ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² Π²Ρ ΠΎΠ΄ΠΈΡ ΡΠΎΠΊΠ΅Ρ.
ΠΠ· ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π΅ Π²ΠΈΠ΄Π½ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π΄Π°Π΅Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠΎΠΊΠ΅Ρ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΌ. ΠΠ°Π·Π°Π»ΠΎΡΡ Π±Ρ, ΠΏΡΠΎΡΠ΅ Π²ΡΠ·Π²Π°ΡΡ connect Π² Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° ΠΈ Π»ΠΈΡΡ ΠΏΠΎΡΠΎΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠΊΠ΅Ρ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΡΠ΄ΠΎΠ±Π½Π΅Π΅. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ ΡΠ²ΡΠ·Π°Π½Ρ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ connect ΠΈ select ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠ°ΠΊΡΡ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΡΠ°Π±ΠΎΡΡ, Π° Π² ΡΠ»ΡΡΠ°Π΅ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π±ΡΠ΄Π΅Ρ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Π° ΡΠ½Π°ΡΠ°Π»Π° Π΄ΠΎΠΆΠ΄Π°ΡΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ connect ΠΈ Π»ΠΈΡΡ ΠΏΠΎΡΠΎΠΌ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ Π΅ΡΠ΅.
Π€ΡΠ½ΠΊΡΠΈΡ send Π΄Π»Ρ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ. ΠΠ½ΠΈ ΠΏΡΠΎΡΠ²Π»ΡΡΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ Π΅ΡΡΡ, Π½ΠΎ Π΅Π³ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΡ send, ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΠΌΠΎΠΆΠ΅Ρ ΡΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π±ΡΡΠ΅Ρ ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ , Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Ρ Π²Π°ΡΠ°Π΅Ρ ΠΌΠ΅ΡΡΠ°. ΠΡΠΈ ΡΡΠΎΠΌ ΠΎΠ½Π° Π²Π΅ΡΠ½Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΡΠ°Π²Π½ΠΎΠ΅ ΡΡΠΎΠΌΡ ΠΎΠ±ΡΠ΅ΠΌΡ (ΠΎΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° len, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ). ΠΡΡΠ°Π²ΡΠΈΠ΅ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ ΠΏΠΎΠ·ΠΆΠ΅, Π²ΡΠ·Π²Π°Π² Π΅ΡΠ΅ ΡΠ°Π· ΡΡΠ½ΠΊΡΠΈΡ send. Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ send Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ TCP. Π ΡΠ»ΡΡΠ°Π΅ UDP Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΠ° Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠ°Π·Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π° ΡΠ°ΡΡΠΈ, ΠΈ Π΅ΡΠ»ΠΈ Π² Π²ΡΡ ΠΎΠ΄Π½ΠΎΠΌ Π±ΡΡΠ΅ΡΠ΅ Π½Π΅ Ρ Π²Π°ΡΠ°Π΅Ρ ΠΌΠ΅ΡΡΠ° Π΄Π»Ρ Π²ΡΠ΅ΠΉ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ, ΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ send Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ, a WSAGetLastError β WSAEWOULDBLOCK.
Π‘ΡΠ°Π·Ρ ΠΎΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ, Ρ ΠΎΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ send Π΄Π°Π½Π½ΡΡ Π² Π±ΡΡΠ΅Ρ ΡΠΎΠΊΠ΅ΡΠ°, Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΠ°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ ΠΏΠΎΠΊΠ° Π½Π΅ ΡΠ΄Π°Π»ΠΎΡΡ: Π²ΡΠ΅ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΡ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΈ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ send Π²ΡΠ΅Π³Π΄Π° Π»ΠΈΠ±ΠΎ ΠΊΠΎΠΏΠΈΡΡΠ΅Ρ Π΄Π°Π½Π½ΡΠ΅ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ, ΡΠ°ΡΡΠΈΡΡΡ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π±ΡΡΠ΅Ρ, Π»ΠΈΠ±ΠΎ Π΄Π°Π΅Ρ ΠΎΡΠΈΠ±ΠΊΡ WSAEWOULDBLOCK. ΠΠ°Π»Π΅Π΅ ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΡΠΆΠ΄Π°ΡΡΡΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ, Ρ.ΠΊ. ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΠ²ΠΈΡΡΡΡ Π² ΡΠ΅Ρ ΡΡΠ»ΠΎΠ²ΠΈΡΡ ΠΈΠ»ΠΈ Π² ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠΎΠΊΠ΅ΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π² Π½Π°ΡΠΈΡ ΡΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠ°Ρ Π½Π΅ Π±ΡΠ»ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Ρ.
2.1.16. Π‘Π΅ΡΠ²Π΅Ρ Π½Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠ°Ρ
Π ΡΡΠΎΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΌΡ ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΡΠ΅ΡΠ²Π΅Ρ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΠΉ Π½Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠ°Ρ . ΠΡΠΎ Π±ΡΠ΄Π΅Ρ Π½Π°Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ, Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΡΠ½ΠΊΡΠΈΡ ReadFromSocket (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 2.13). ΠΡΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ (ΠΏΡΠΈΠΌΠ΅Ρ NonBlockingServer Π½Π° ΠΊΠΎΠΌΠΏΠ°ΠΊΡ-Π΄ΠΈΡΠΊΠ΅) ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠΉ Π½ΠΈΡΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠΊΠ΅ΡΠ½ΡΠΌΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ, Ρ.ΠΊ. Π²ΡΠ΅ ΡΠΎΠΊΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ. ΠΠ° ΡΠΎΡΠΌΠ΅ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ, ΠΏΠΎ ΡΠΈΠ³Π½Π°Π»Π°ΠΌ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠ² Π²ΡΠ΅Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΠ²ΡΠΈΡ ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². ΠΡΠ»ΠΈ Π΄Π°Π½Π½ΡΡ Π½Π΅Ρ, ΡΡΠ½ΠΊΡΠΈΡ recv Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ WSAEWOULDBLOCK, ΠΈ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΡ ΠΊ ΠΏΠΎΠΏΡΡΠΊΠ΅ ΡΡΠ΅Π½ΠΈΡ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠΊΠ΅ΡΠ°.
ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ° (Π»ΠΈΡΡΠΈΠ½Π³ 2.30) ΠΌΠ°Π»ΠΎ ΡΠ΅ΠΌ ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ Π·Π°ΠΏΡΡΠΊΠ° ΠΌΠ½ΠΎΠ³ΠΎΠ½ΠΈΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° (ΡΠΌ. Π»ΠΈΡΡΠΈΠ½Π³ 2.19). ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΡ ΡΠ°Π·Π½ΠΈΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²ΠΌΠ΅ΡΡΠΎ Π·Π°ΠΏΡΡΠΊΠ° "ΡΠ»ΡΡΠ°ΡΡΠ΅ΠΉ" Π½ΠΈΡΠΈ ΡΠΎΠΊΠ΅Ρ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΠΈΡΡΡ Π² Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΉ ΡΠ΅ΠΆΠΈΠΌ ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ°ΠΉΠΌΠ΅Ρ.
ΠΠΈΡΡΠΈΠ½Π³ 2.30. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π° Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠ°Ρ// Π Π΅Π°ΠΊΡΠΈΡ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ "ΠΠ°ΠΏΡΡΡΠΈΡΡ" - Π·Π°ΠΏΡΡΠΊ ΡΠ΅ΡΠ²Π΅ΡΠ°
procedure TServerForm.BtnStartServerClick(Sender: TObject);
var
// ΠΠ΄ΡΠ΅Ρ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΏΡΠΈΠ²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΡΡΠΈΠΉ ΡΠΎΠΊΠ΅Ρ
ServerAddr: TSockAddr;
NonBlockingArg: u_long;
begin
// Π€ΠΎΡΠΌΠΈΡΡΠ΅ΠΌ Π°Π΄ΡΠ΅Ρ Π΄Π»Ρ ΠΏΡΠΈΠ²ΡΠ·ΠΊΠΈ.
FillChar(ServerAddr.sin_zero, SizeOf(ServerAddr.sin_zero), 0);
ServerAddr.sin_family := AF_INET;
ServerAddr.sin_addr.S_addr := INADDR_ANY;
try
ServerAddr.sin_port := htons(StrToInt(EditPortNumber.Text));
if ServerAddr.sin_port = 0 then
begin
MessageDlg('ΠΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 1-65535',