ΠΡΠΈΠΌΠ΅Ρ: Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½Π°Ρ ΡΡΡΠ°ΡΠ΅Π³ΠΈΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ DLL Ρ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ
Π₯ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 12.4 ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΈΠΏΠΈΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ TLS ΠΈ DllMain Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, Π² Π½Π΅ΠΉ ΠΈΠΌΠ΅Π΅ΡΡΡ ΠΎΠ΄Π½ΠΎ ΡΠ»Π°Π±ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, ΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌ Π³ΠΎΠ²ΠΎΡΠΈΡΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ ΠΊ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΡΠ°Π·Π΄Π΅Π»Ρ. Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, "ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅" Π°ΡΡΠΎΡΠΈΠΈΡΡΠ΅ΡΡΡ Π½Π΅ Ρ ΡΠΎΠΊΠ΅ΡΠΎΠΌ, Π° Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ Π² ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΎΠΊΠ΅ΡΠΎΠΌ.
ΠΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠΉ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ, Π²ΡΡΡΡΠΏΠ°ΡΡΠ΅ΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠΎΠ΄Π° Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ. Π’ΠΎΠ³Π΄Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Ρ ΡΠ°Π½ΠΈΡΡ Π² ΡΡΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠ΅. ΠΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ UNIX ΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π‘, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ. ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΠΊ ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π²Π²ΠΎΠ΄ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ.
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 12.5 ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 12.4. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΡΡΠΎ DllMain ΡΠ΅ΠΏΠ΅ΡΡ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ, Π½ΠΎ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π΄Π²Π΅ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΡΡΡΡΠΊΡΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. ΠΠ»Ρ ΡΡΠ½ΠΊΡΠΈΠΉ send ΠΈ receive ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ Π»ΠΈΡΡ ΡΠ°ΠΌΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ΅ΡΠ²Π΅ΡΠ°, serverSKHA, Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° Web-ΡΠ°ΠΉΡΠ΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΠΈΡΡ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈ Π·Π°ΠΊΡΡΡΠΈΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ° ΡΠΎΠΊΠ΅ΡΠ° (ΠΠ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ "handle" β Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ).
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° 12.5. SendReceiveSKHA: Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½Π°Ρ DLL ΡΠΎ ΡΡΡΡΠΊΡΡΡΠΎΠΉ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ/* SendReceiveSKHA.Ρ β ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ. */
/* ΠΠ°Π½Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ*/
/* SendReceiveSKST.c, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ Π΄ΡΡΠ³ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΡ, ΠΎΡΠ½ΠΎΠ²Π°Π½Π½ΡΡ */
/* Π½Π° Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ. */
/* Π‘ΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π΅ Π² TLS, Π° Π² ΡΡΡΡΠΊΡΡΡΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, Π½Π°ΠΏΠΎΠΌΠΈΠ½Π°ΡΡΠ΅ΠΉ*/
/* Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ HANDLE. ΠΠ»Π°Π³ΠΎΠ΄Π°ΡΡ ΡΡΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ°Π·Ρ */
/* Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΎΠΊΠ΅ΡΠΎΠ². Π‘ΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»ΡΡΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ ('\0')*/
#define _NOEXCLUSIONS
#include "EvryThng.h"
#include "ClntSrvr.h " /* ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΠΈ Π·Π°ΠΏΡΠΎΡΠ° ΠΈ ΠΎΡΠ²Π΅ΡΠ°. */
typedef struct SOCKET_HANDLE_T {
/* Π’Π΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ° Π² ΡΡΡΡΠΊΡΡΡΠ΅ "handle". */
/* Π‘ΡΡΡΠΊΡΡΡΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ "static_buf_len" ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ . */
/* Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ (Π½ΡΠ»Π΅Π²ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ) ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ, */
/* Π° ΠΌΠΎΠ³ΡΡ ΠΈ Π½Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ. */
SOCKET sk; /* Π‘ΠΎΠΊΠ΅Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΠΎΠΉ "handle". */
char static_buf[MAX_RQRS_LEN];
LONG32 static_buf_len;
} SOCKET_HANDLE, * PSOCKET_HANDLE;
/* Π€ΡΠ½ΠΊΡΠΈΠΈ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΈ Π·Π°ΠΊΡΡΡΠΈΡ "Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΡ ΡΠΎΠΊΠ΅ΡΠΎΠ²". */
_declspec(dllexport)
PVOID CreateCSSocketHandle(SOCKET s) {
PVOID p;
PSOCKET_HANDLE ps;
p = malloc(sizeof(SOCKET_HANDLE));
if (p == NULL) return NULL;
ps = (PSOCKET_HANDLE)p;
ps->sk = s;
ps->static_buf_len = 0; /* ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π±ΡΡΠ΅ΡΠ°. */
return p;
}
_declspec(dllexport)
BOOL CloseCSSocketHandle(PVOID p) {
if (p == NULL) return FALSE;
free(p);
return TRUE;
}
_declspec(dllexport)
BOOL ReceiveCSMessage(REQUEST *pRequest, PVOID sh)
/* Π’ΠΈΠΏ PVOID ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ */
/* Π² Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ SOCKET_HANDLE. */
{
/* ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ TRUE ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΡΠΈΠ±ΠΊΡ ΠΈΠ»ΠΈ ΠΎΡΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅. β¦ */
PSOCKET_HANDLE p;
SOCKET sd;
Ρ = (PSOCKET_HANDLE)sh;
if (p == NULL) return FALSE;
sd = p->sk;
/* ΠΡΠΈΠΌ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ ΠΎΡ SendReceiveSKST! β¦ */
}
_declspec(dllexport)
BOOL SendCSMessage(RESPONSE *pResponse, PVOID sh) {
/* ΠΠΎΡΠ»Π°ΡΡ Π·Π°ΠΏΡΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΡ Π² ΡΠΎΠΊΠ΅Ρ sd. β¦ */
SOCKET sd;
PSOCKET_HANDLE p;
p = (PSOCKET_HANDLE)sh;
if (p == NULL) return FALSE;
sd = p->sk;
/* ΠΡΠΈΠΌ ΠΈΡΡΠ΅ΡΠΏΡΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΎΡΠ»ΠΈΡΠΈΡ ΠΎΡ SendReceiveSKST! β¦ */
}
ΠΠ΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ
ΠΠ΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½Ρ ΠΏΠΎΡΡΠΎΠ²ΡΠΌ ΡΡΠΈΠΊΠ°ΠΌ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠΈ ΡΡ ΠΎΠ΄Π½ΡΡ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΡΡΠ²Π°Ρ . Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Π΅ΠΌ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΌ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ, Π° ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ. ΠΠΈ ΠΏΠΎΡΡΠΎΠ²ΡΠ΅ ΡΡΠΈΠΊΠΈ, Π½ΠΈ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΡΡ Π΄ΠΎΡΡΠ°Π²ΠΊΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎΠ»ΡΡΠ°ΡΠ΅Π»Ρ, Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ΄ΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ Π² ΡΠΎΠΉ ΠΆΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄Π½ΠΎΡΡΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΠ½ΠΈ Π±ΡΠ»ΠΈ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½Ρ.
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠ° ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ socket Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ SOCK_DGRAM Π² ΠΏΠΎΠ»Π΅ type.
ΠΠ°Π»Π΅Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ sendto ΠΈ recvfrom, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅ ΠΆΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ, ΡΡΠΎ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ send ΠΈ recv, Π½ΠΎ ΠΈΠΌΠ΅ΡΡ ΠΏΠΎ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°, ΠΎΡΠ½ΠΎΡΡΡΠΈΡ ΡΡ ΠΊ ΡΡΠ°Π½ΡΠΈΠΈ-ΠΏΠ°ΡΡΠ½Π΅ΡΡ. Π’Π°ΠΊ, ΡΡΠ½ΠΊΡΠΈΡ sendto ΠΈΠΌΠ΅Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠΎΡΠΈΠΏ:
int sendto(SOCKET s, LPSTR lpBuffer, int nBufferLen, int nFlags, LPSOCKADDR lpAddr, int nAddrLen);
lpAddr β ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π°Π΄ΡΠ΅ΡΠ½ΡΡ ΡΡΡΡΠΊΡΡΡΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°Π΄Π°ΡΡ ΠΈΠΌΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΡΡΠ° ΠΈΠ»ΠΈ ΠΆΠ΅ ΡΠΊΠ°Π·Π°ΡΡ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ°ΡΡΡΠ»ΠΊΠΈ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ ΡΠΎΠ²ΠΎΠΊΡΠΏΠ½ΠΎΡΡΠΈ ΡΠΈΡΡΠ΅ΠΌ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΡ recvfrom, Π²Ρ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈΠ»ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΡΠ΅), ΠΎΡ ΠΊΠΎΡΠΎΡΡΡ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΏΡΠΎΡΠ΅Π΄ΡΡ
ΠΠ±ΡΡΠ½ΠΎ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ RPC. ΠΠΎ ΡΡΡΠΈ Π΄Π΅Π»Π°, Π² ΡΠ°ΠΌΡΡ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΏΠΎΡΡΠ»Π°Π΅Ρ Π·Π°ΠΏΡΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠ° Π·Π°ΠΏΡΠΎΡΠ° Π½Π΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ, ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π·Π°ΠΏΡΠΎΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΡΠ²Π΅Ρ ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ° (Π΄Π»Ρ ΠΏΠΎΡΡΠ»ΠΊΠΈ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π΅ΠΉΡΠ°Π³ΡΠ°ΠΌΠΌΡ) Π½Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½. Π‘Π΅ΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π³ΠΎΡΠΎΠ² ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ Π·Π°ΠΏΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π΅ΠΌΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°Π·.
ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π½ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡ, Π½ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ RPC ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ ΡΠΈΠ³Π½Π°Π»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· ΠΏΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ, Π½Π΅ ΡΡΠ΅Π±ΡΡΡΡΡ; Π²ΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΡΠ²ΡΠ·ΡΠ²Π°ΡΡΡΡ Π΄ΡΡΠ³ Ρ Π΄ΡΡΠ³ΠΎΠΌ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΈ ΠΎΡΠ²Π΅ΡΠΎΠ². Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ RPC ΠΌΠΎΠΆΠ΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΏΡΡΠ΅ΠΌ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΏΠΎ ΠΈΡΡΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄Π° ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ, ΡΡΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡΡΠ°ΠΆΠ°ΡΡΡ ΠΈΠ½Π°ΡΠ΅, ΡΠ°ΡΡΠΎ Π³ΠΎΠ²ΠΎΡΡΡ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΠΊΠ»ΠΈΠ΅Π½Ρ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ RPC Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (ΠΎΠ½ΠΈ Π½Π΅ Ρ ΡΠ°Π½ΡΡ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° ΠΈΠ»ΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ², Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ΅Π½ ΠΎΡΠ²Π΅Ρ). ΠΡΡΡΠ΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π±ΡΠ΄Π΅Ρ ΡΠ΅ΠΌ ΠΆΠ΅, ΡΡΠΎ ΠΈ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. ΠΡΠΎ ΡΠ°ΠΊΠΆΠ΅ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠΏΡΠΎΡΠ°Π΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ.
Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Berkeley Sockets ΠΈ Windows Sockets
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Berkeley Sockets, Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈ Ρ Windows Sockets, Π΅ΡΠ»ΠΈ Π²Ρ ΡΡΡΠ΅ΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²Π°ΠΆΠ½ΡΠ΅ ΠΌΠΎΠΌΠ΅Π½ΡΡ:
β’ ΠΠ»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Winsock DLL Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ WSAStartup.
β’ ΠΠ»Ρ Π·Π°ΠΊΡΡΡΠΈΡ ΡΠΎΠΊΠ΅ΡΠ° Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ ΡΡΠ½ΠΊΡΠΈΡ close (ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΠΈΠΌΠΎΠΉ), Π° ΡΡΠ½ΠΊΡΠΈΡ closesocket (ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΊΠΎΠ²ΠΎΠΉ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ).
β’ ΠΠ»Ρ Π·Π°ΠΊΡΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ DLL Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·Π²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ WSACleanup.
ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠΈΠΏΡ Π΄Π°Π½Π½ΡΡ Windows, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, SOCKET ΠΈ LONG Π²ΠΌΠ΅ΡΡΠΎ int, ΠΊΠ°ΠΊ Π±ΡΠ»ΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ 12.1 ΠΈ 12.2 Π±ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΠ΅Π½Ρ ΠΈΠ· UNIX, ΠΈ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΈΡΡ ΡΠ°ΠΌΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠΈΠ»ΠΈΡ. ΠΠΌΠ΅ΡΡΠ΅ Ρ ΡΠ΅ΠΌ, ΠΏΠΎΡΡΠ΅Π±ΠΎΠ²Π°Π»ΠΎΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ DLL ΠΈ ΡΠ°Π·Π΄Π΅Π»Ρ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΠ΅ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ. Π ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΈ 12.13 Π²Π°ΠΌ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π½Π΅ΡΡΠΈ ΡΡΠΈ Π΄Π²Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ Π² UNIX.
ΠΠ΅ΡΠ΅ΠΊΡΡΠ²Π°ΡΡΠΈΠΉΡΡ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Windows Sockets
Π Π³Π»Π°Π²Π΅ 14 ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ Π²Π²ΠΎΠ΄/Π²ΡΠ²ΠΎΠ΄, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊΡ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ²ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°. Π ΡΠΎΠΉ ΠΆΠ΅ Π³Π»Π°Π²Π΅ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΡΡΡ ΠΈ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅ΡΠΎΠ² Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ Windows.
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π·Π°Π΄Π°Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΅ΡΠΈΡΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π’Π°ΠΊ, Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ serverSK Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎΡΡ ΡΠΎΠΊΠ΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ (accept thread). Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΡΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌ Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²ΡΠ²ΠΎΠ΄ΠΎΠΌ, ΠΈΠ³ΡΠ°ΡΡ Π²Π°ΠΆΠ½ΡΡ ΡΠΎΠ»Ρ Π² ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². ΠΡΠ° ΡΠ΅ΠΌΠ° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ Π² Π³Π»Π°Π²Π΅ 14.
Windows Sockets 2
ΠΠ΅ΡΡΠΈΡ Windows Sockets 2 Π²Π²ΠΎΠ΄ΠΈΡ Π½ΠΎΠ²ΡΠ΅ ΡΡΠ΅ΡΡ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΠΈ ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Π° Π½Π° Π²ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Windows, Ρ ΠΎΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Windows 9x ΡΡΠ΅Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠ° ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ. Π ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π²Π΅ΡΡΠΈΡ 2.0, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΈ Π²Π΅ΡΡΠΈΡ 1.1, Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ Π½Π΅ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Windows 9Ρ . ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ Π²Π΅ΡΡΠΈΠΈ 1.1 Π² Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π²Π°ΠΌ Π±ΡΠ΄Π΅Ρ Π²ΠΏΠΎΠ»Π½Π΅ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΠ΅ΡΡΠΈΡ Windows Sockets 2.0 ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ, Π² ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ: