рдпрд╣ рд▓реЗрдЦ рдореЗрд░реЗ рд▓реЗрдЦ рдХрд╛ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд╣реИ
рдПрд╕рдПрд╕рдПрд▓ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рд░реНрд╡рд░ ред
рдЗрд╕рд▓рд┐рдП, рдЖрдЧреЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдХреЗ рдХрдо рд╕реЗ рдХрдо рднрд╛рдЧ рдХреЛ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЙрдЪрд┐рдд рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдРрд╕рд╛ рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рд╛рд░рд╛рдВрд╢ рд╣реИ: рдореИрдВрдиреЗ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдлрд╝рд╛рдЗрд▓ "serv.cpp" рд▓реА рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕рд░рд▓ рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕рд░реНрд╡рд░ рдмрдирд╛рдпрд╛ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдПрдХ рд╡рд░реНрдг рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдм рдореИрдВ рдЖрдЧреЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ:
1. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╕рдВрдкреВрд░реНрдг http рд╣реЗрдбрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
2. рдПрдЪрдЯреАрдПрдордПрд▓ рдкреЗрдЬ рдмреНрд░рд╛рдЙрдЬрд░ рдХреЛ рднреЗрдЬреЗрдВ рдЬрд┐рд╕рдореЗрдВ http рд╣реИрдбрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдЧрд╛ред
3. рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рд╕реЙрдХреЗрдЯ рд╕рд░реНрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрд╡рд░реБрджреНрдз рди рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрдиреНрд╣реЗрдВ рддрдерд╛рдХрдерд┐рдд "рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдореЛрдб" рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджреВрдВрдЧрд╛ред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд serv.cpp рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ рдореЛрдб рдореЗрдВ рд╕реЙрдХреЗрдЯреНрд╕ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореИрдХреНрд░реЛрдЬрд╝ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реА рдкрд╣рд▓реА рдЪреАрдЬрд╝ рд╣реИ:
рдЗрд╕ рдХреЛрдб рдХреА рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП
#ifndef WIN32 #define closesocket close #endif
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░реЗрдВ:
#ifdef WIN32 #define SET_NONBLOCK(socket) \ if (true) \ { \ DWORD dw = true; \ ioctlsocket(socket, FIONBIO, &dw); \ } #else #include <fcntl.h> #define SET_NONBLOCK(socket) \ if (fcntl( socket, F_SETFL, fcntl( socket, F_GETFL, 0 ) | O_NONBLOCK ) < 0) \ printf("error in fcntl errno=%i\n", errno); #define closesocket(socket) close(socket) #endif
рд╣реЛ рдЧрдпрд╛! рдЕрдм, "рд╕реБрдирдиреЗ" рд╕реЙрдХреЗрдЯ рдХреЛ рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ рдореЛрдб рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд▓рд╛рдЗрди рдХреЗ рдмрд╛рдж рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ
listen_sd = socket (AF_INET, SOCK_STREAM, 0); CHK_ERR(listen_sd, "socket");
рд▓рд╛рдЗрди рдбрд╛рд▓реЗрдВ:
SET_NONBLOCK(listen_sd);
рдЕрдм "рд╕реБрдирдирд╛" рд╕реЙрдХреЗрдЯ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ рд╣реИ рдФрд░ рдХреЙрд▓ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕реНрд╡реАрдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдо рдкрд░ рдирд┐рдпрдВрддреНрд░рдг рд▓реМрдЯрд╛ рджреЗрдЧрд╛ред
рд╕реЙрдХреЗрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рдмрдЬрд╛рдп, рд╕реНрд╡реАрдХрд╛рд░ рдЕрдм рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ (-1)ред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЧреИрд░-рдЕрд╡рд░реЛрдзрдХ рдореЛрдб рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдЕрдирдиреНрдд рд▓реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╕реЙрдХреЗрдЯ рд╣реИрдВрдбрд▓ рдирд╣реАрдВ рджреЗрддрд╛
int sd = -1; while(sd == -1) { Sleep(1); #ifdef WIN32 sd = accept (listen_sd, (struct sockaddr*) &sa_cli, (int *)&client_len); #else sd = accept (listen_sd, (struct sockaddr*) &sa_cli, &client_len); #endif }
рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ 100% рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрд▓реАрдк (1) рдХреЛ рд▓реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ред рд╡рд┐рдВрдбреЛрдЬ рдкрд░, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ 1 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдмреНрд░реЗрдХред рдЗрд╕рдХреЗ рд▓рд┐рдП рд▓рд┐рдирдХреНрд╕ рдкрд░ рдХрд╛рдо рдХрд░реЗрдВ, рдлрд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
#ifndef WIN32 #define Sleep(a) usleep(a*1000) #endif
рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдПрдХ рдЕрдирдВрдд рд▓реВрдк рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╕рд┐рд▓реЗрдХреНрдЯ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдЗрд╕рдХреЗ рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╕рдордХрдХреНрд╖реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрдм рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╕реБрди_рдПрд╕рдбреА рд╕реЙрдХреЗрдЯ рдкрдардиреАрдп рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рддрдм рдХреЙрд▓ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдЕрдкрдиреА рд╕рд╛рдЗрдХрд┐рд▓ рдкрджреНрдзрддрд┐ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЦрд╛рдорд┐рдпрд╛рдВ рдирд╣реАрдВ рджрд┐рдЦрддреАрдВред
рдЗрд╕рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓ рдЬрд╛рдПрдЧрд╛ред рд╕рд┐рджреНрдзрд╛рдВрдд рдореЗрдВ рдПрд╕рдбреА рд╕реЙрдХреЗрдЯ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЕрднреНрдпрд╛рд╕ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдХреЗ рдЕрдВрдд рдореЗрдВ рдореИрдХреНрд░реЛ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИ
SET_NONBLOCK(sd);
рдЕрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯ рдиреЙрди-рдмреНрд▓реЙрдХрд┐рдВрдЧ, рдлрдВрдХреНрд╢рди рд╣реИ
err = SSL_accept (ssl);
рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдирд┐рд▓рдВрдмрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЧрд▓рддреА рд╕реЗ рдХреЙрд▓ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ = SSL_ERROR_WANT_READ рдпрд╛ SSL_ERROR_WANT_WRITE
рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдФрд░ рдЕрдирдВрдд рд▓реВрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
while(1) { Sleep(1); err = SSL_accept (ssl); const int nCode = SSL_get_error(ssl, err); if ((nCode != SSL_ERROR_WANT_READ) && (nCode != SSL_ERROR_WANT_WRITE)) break; } CHK_SSL(err);
рдХреЗрд╡рд▓ рдЬрдм рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЗрд╕ рдЪрдХреНрд░ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рдФрд░ рдЖрдк рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рдо рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ http рд╣реЗрдбрд░ рдФрд░ рдЕрдиреБрд░реЛрдз рдмреЙрдбреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, http рд╢реАрд░реНрд╖рдХ "\ r \ n \ r \ n" рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╣рдо рдЕрдкрдирд╛ рдХреЛрдб рдареАрдХ рдХрд░реЗрдВрдЧреЗ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдкреВрд░реЗ http рд╣реЗрдбрд░ рдХреЛ рдкрдврд╝реЗ, рди рдХрд┐ рдХреЗрд╡рд▓ рдЙрд╕рдХреЗ рдкрд╣рд▓реЗ рдЕрдХреНрд╖рд░ рдХреЛред
рдХреЛрдб рдХреЛ рдЫреЛрдЯрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЕрджреНрднреБрдд рдПрд╕рдЯреАрдПрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ:
1. рддреАрди рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВ:
#include <vector> #include <string> #include <sstream>
2. рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ
err = SSL_read (ssl, buf, sizeof(buf) - 1); CHK_SSL(err); buf[err] = '\0'; printf ("Got %d chars:'%s'\n", err, buf);
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП:
std::vector<unsigned char> vBuffer(4096);
рдЗрд╕ рдЪрдХреНрд░ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ http рд╣реЗрдбрд░ "\ r \ n \ r \ n" рдХреЗ рдЕрдВрдд рдХреЗ рд▓рд┐рдП рд╡рд░реНрдг рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдЬрдм рддрдХ рдмрдлрд░ рд╕реНрдкреЗрд╕ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рддрд╛ рд╣реИред
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ рдХрд┐ рдмрдлрд░ рдХреЛ std :: рд╡реЗрдХреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдпрджрд┐ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдореБрдЭреЗ рдЗрд╕рдХреА рд▓рдВрдмрд╛рдИ рдпрд╛рдж рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд▓реВрдк рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдкреВрд░реЗ http рд╣реЗрдбрд░ рдФрд░, рд╕рдВрднрд╡рддрдГ, рдЕрдиреБрд░реЛрдз рдмреЙрдбреА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдмрдлрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
3. рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ html рдкреЗрдЬ рднреЗрдЬреЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЗрд╕рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ http рд╣реЗрдбрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдмрджрд▓реЗрдВ
err = SSL_write (ssl, "I hear you.", strlen("I hear you.")); CHK_SSL(err);
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд▓рд┐рдП:
рдЪреВрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рд╕реЙрдХреЗрдЯ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрддреНрддрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ рднреЗрдЬрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ SSL_write рдХреЛ рд▓реВрдк рдореЗрдВ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╡рд╣ рд╕рдм рд╣реИред рдЕрдм рдЖрдк рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
localhost:1111
рдЬрд╡рд╛рдм рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдкрдиреЗ http рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдПрдХ рдкреГрд╖реНрда рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред
рд╕рдВрдЧреНрд░рд╣
3_.3s3s.org рдореЗрдВ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЬреЗрдХреНрдЯред
рд▓рд┐рдирдХреНрд╕ рдХреЗ рддрд╣рдд рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рд╕реЗ "ca-cert.pem" рдФрд░ "serv.cpp" рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рд╕рдВрдХрд▓рдХ рдЪрд▓рд╛рдПрдВ: "g ++ -L / usr / lib -lsl -lcrypto serv.cpp
рдкреБрдирд╢реНрдЪ:
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдПрдХ рдирд┐рд░рдВрддрд░рддрд╛ рд▓рд┐рдЦрд╛ рд╣реИ