const
+ { Address families: }
+ { These are here so users of this unit don't necessarily have to
+ use Sockets as well. }
+ AF_UNSPEC = Sockets.AF_UNSPEC;
+ AF_INET = Sockets.AF_INET;
+ AF_INET6 = Sockets.AF_INET6;
+
{ Connection feature requests: }
NET_TCP_BASIC = 0;
NET_TCP_RFCSUPPORT = 1;
{ Resolves the given hostname, and tries to connect it on the given port. }
var GAIResult: TGAIResult;
begin
- FSocket:= fpSocket(af_inet, sock_stream, 0);
- if (FSocket <> -1) then begin
- GAIResult:= ResolveHost(HostName, AF_UNSPEC);
- if GAIResult.GAIError = 0 then begin
- Move(GAIResult.AddrInfo^.ai_addr^, SockAddr, GAIResult.AddrInfo^.ai_addrlen);
- SockAddr.sin6_port:= htons(Port);
+ GAIResult:= ResolveHost(HostName, AF_UNSPEC);
+ if GAIResult.GAIError = 0 then begin
+ Move(GAIResult.AddrInfo^.ai_addr^, SockAddr, GAIResult.AddrInfo^.ai_addrlen);
+ SockAddr.sin6_port:= htons(Port);
+
+ { Create socket. }
+ FSocket:= fpSocket(GAIResult.AddrInfo^.ai_family, SOCK_STREAM, 0);
+
+ if (FSocket <> -1) then begin
{ Try to initiate connection. }
FConnected:= fpConnect(FSocket, @SockAddr, GAIResult.AddrInfo^.ai_addrlen) <> -1;
- if FConnected then begin
- FHostIP:= TIPNamePair.Create(HostName, IPToStr(@SockAddr));
- SetSockTimeOut(FSockTimeOut);
- end
- else
- CloseSocket(FSocket);
+ if FConnected then begin
+ FHostIP:= TIPNamePair.Create(HostName, IPToStr(@SockAddr));
+ SetSockTimeOut(FSockTimeOut);
+ end
+ else
+ CloseSocket(FSocket);
- FreeHost(GAIResult);
end;
+
+ FreeHost(GAIResult);
end;
Result:= FConnected;
end;
var NHostIP: TIPNamePair;
begin
if FConnected then begin
- NHostIP:= TIPNamePair.Create(ResolveIP(@SockAddr), FHostIP.IP);
+ NHostIP:= TIPNamePair.Create(ResolveIP(PSockAddr(@SockAddr)), FHostIP.IP);
FHostIP.Free;
FHostIP:= NHostIP;
end;