- GAIResult:= ResolveHost(HostName);
- if GAIResult.GAIError = 0 then begin
- SockAddr:= GAIResult.AddrInfo^.ai_addr^;
- SockAddr.sin_port:= htons(Port);
-
- if SockAddr.sin_addr.s_addr <> 0 then
- { Try to initiate connection. }
- FConnected:= fpConnect(FSocket, @SockAddr, SizeOf(SockAddr)) <> -1;
-
- if FConnected then begin
- FHostIP:= TIPNamePair.Create(HostName, NetAddrToStr(SockAddr.sin_addr));
- SetSockTimeOut(FSockTimeOut);
- end
- else
- CloseSocket(FSocket);
+ if (SrcSockAddr.sin_addr.s_addr = 0) or (fpBind(FSocket, @SrcSockAddr, SizeOf(SrcSockAddr)) = 0) then begin
+ GAIResult:= ResolveHost(HostName);
+ if GAIResult.GAIError = 0 then begin
+ DstSockAddr:= GAIResult.AddrInfo^.ai_addr^;
+ DstSockAddr.sin_port:= htons(Port);
+
+ if DstSockAddr.sin_addr.s_addr <> 0 then
+ { Try to initiate connection. }
+ FConnected:= fpConnect(FSocket, @DstSockAddr, SizeOf(DstSockAddr)) <> -1;
+
+ if FConnected then begin
+ FHostIP:= TIPNamePair.Create(HostName, NetAddrToStr(DstSockAddr.sin_addr));
+ SetSockTimeOut(FSockTimeOut);
+ end
+ else
+ CloseSocket(FSocket);