• R/O
  • SSH
  • HTTPS

akdf: Commit


Commit MetaInfo

Revision565 (tree)
Time2022-01-11 01:27:51
Authorderekwildstar

Log Message

Ajuste na função SendSynchronousSocketMessage de forma que o WinSock seja iniciado antes de qualquer outra operação, pois isso é necessário

Change Summary

Incremental Difference

--- trunk/rtp/src/Network/KRK.Network.WinSock2.pas (revision 564)
+++ trunk/rtp/src/Network/KRK.Network.WinSock2.pas (revision 565)
@@ -37,45 +37,46 @@
3737 // OutputDebugString
3838 Result := '';
3939
40- NodeName := AnsiString(ADestination);
41- ServiceName := AnsiString(IntToStr(APort));
42-
43- ZeroMemory(@Hints,SizeOf(ADDRINFO));
44- PResult := nil;
45-
46- Hints.ai_family := AF_INET;
47- Hints.ai_socktype := SOCK_STREAM;
48- Hints.ai_protocol := IPPROTO_TCP;
49-
50- // Obtém uma estrutura onde um dos seus membros é um PSOCKADDR (TSockAddrIn),
51- // uma estrutura que especifica a família de endereço, o IP e a porta do
52- // servidor no qual se pretende conectar. Este membro é usado em connect, mais
53- // adiante, para realizar a conexão com a outra parte
54-
55- if GetAddrInfo(@NodeName[1],@ServiceName[1],@Hints,@PResult) <> 0 then
56- raise EWinSock.Create('GetAddrInfo')
40+ // Inicializa o WinSock
41+ if WSAStartup(MakeWord(2,2),WSAData) <> NO_ERROR then
42+ raise EWinSock.Create('WSAStartup')
5743 else
5844 // Abaixo, todos os raises levantam exceções, mas mesmo assim os blocos
59- // finally serão executado. Tenha isso em mente e saiba que todos os códigos
60- // de limpeza serão executados em caso de erro
45+ // finally serão executado. Tenha isso em mente e saiba que todos os
46+ // códigos de limpeza serão executados em caso de erro
6147 try
62- // Inicializa o WinSock
63- if WSAStartup(MakeWord(2,2),WSAData) <> NO_ERROR then
64- raise EWinSock.Create('WSAStartup')
48+ // Verifica a versão do WinSock antes de continuar...
49+ if (Lo(WSAData.wVersion) <> 2) or (Lo(WSAData.wVersion) <> 2) then
50+ raise Exception.Create('Não foi possível encontrar uma versão utilizável de WinSock.dll')
6551 else
66- try
67- // Verifica a versão do WinSock antes de continuar...
68- if (Lo(WSAData.wVersion) <> 2) or (Lo(WSAData.wVersion) <> 2) then
69- raise Exception.Create('Não foi possível encontrar uma versão utilizável de WinSock.dll')
70- else
71- begin
72- // Cria um soquete para conectar-se ao servidor. Pense num soquete
73- // como canal de comunicação. Para haver a conexão é necessário
74- // haver um canal de comunicação, um soquete
75- ConnectionSocket := socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
52+ begin
53+ // Cria um soquete para conectar-se ao servidor. Pense num soquete
54+ // como canal de comunicação. Para haver a conexão é necessário
55+ // haver um canal de comunicação, um soquete
56+ ConnectionSocket := socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
7657
77- if ConnectionSocket = INVALID_SOCKET then
78- raise EWinSock.Create('socket')
58+ if ConnectionSocket = INVALID_SOCKET then
59+ raise EWinSock.Create('socket')
60+ else
61+ try
62+ NodeName := AnsiString(ADestination);
63+ ServiceName := AnsiString(IntToStr(APort));
64+
65+ ZeroMemory(@Hints,SizeOf(ADDRINFO));
66+ PResult := nil;
67+
68+ Hints.ai_family := AF_INET;
69+ Hints.ai_socktype := SOCK_STREAM;
70+ Hints.ai_protocol := IPPROTO_TCP;
71+
72+ // Obtém uma estrutura onde um dos seus membros é um PSOCKADDR
73+ // (TSockAddrIn), uma estrutura que especifica a família de
74+ // endereço, o IP e a porta do servidor no qual se pretende
75+ // conectar. Este membro é usado em connect, mais adiante, para
76+ // realizar a conexão com a outra parte
77+
78+ if GetAddrInfo(@NodeName[1],@ServiceName[1],@Hints,@PResult) <> 0 then
79+ raise EWinSock.Create('GetAddrInfo')
7980 else
8081 try
8182 RBS := RawByteString(AMessage);
@@ -128,14 +129,14 @@
128129
129130 Result := String(RBS);
130131 finally
131- closesocket(ConnectionSocket);
132+ FreeAddrInfo(PResult);
132133 end;
134+ finally
135+ closesocket(ConnectionSocket);
133136 end;
134- finally
135- WSACleanup;
136- end;
137+ end;
137138 finally
138- FreeAddrInfo(PResult);
139+ WSACleanup;
139140 end;
140141 end;
141142
Show on old repository browser