[fpc-pascal] lNet getting the local IP
Brian Winfrey
bwcode4u at gmail.com
Fri Oct 8 01:00:31 CEST 2010
I don't know if you noticed, but it appears that code has some
depracated properties that should be changed.
Here are the modifications I made in exploring this issue:
program GetPrimaryIpAddress;
{$mode objfpc}
uses
baseunix,
unixtype,
sockets,
SysUtils;
procedure Get(out AddrOut: string);
const
CN_GDNS_ADDR = '127.0.0.1';
CN_GDNS_PORT = 53;
var
sock: longint;
err: longint;
UnixAddr: TInetSockAddr;
HostAddr: TSockAddr;
len: Integer;
begin
err := 0;
sock := fpsocket(AF_INET, SOCK_DGRAM, 0);
assert(sock <> -1);
// changed because previous properties were deprecated
UnixAddr.sin_family := AF_INET;
UnixAddr.sin_port := htons(CN_GDNS_PORT);
UnixAddr.sin_addr := StrToHostAddr(CN_GDNS_ADDR);
if (fpConnect(sock, @UnixAddr, SizeOf(UnixAddr)) = 0) then
begin
try
len := SizeOf(HostAddr);
if (fpgetsockname(sock, @HostAddr, @len) = 0) then
begin
AddrOut := NetAddrToStr(HostAddr.sin_addr);
end
else
begin
err:=socketError;
end;
finally
if (fpclose(sock) <> 0) then
begin
err := socketError;
end;
end;
end
else
begin
err:=socketError;
end;
if (err <> 0) then
begin
// report error
end;
end;
var
strAddr: string;
begin
Get(strAddr);
WriteLn('ip : ',strAddr);
end.
More information about the fpc-pascal
mailing list