Hello all!
I investigate a little in IPv6 and make first steps. First thing on my roadmap
is getaddrinfo. Can somebody look at code below and tell me whats wrong?
It wotks on Windows XP, but not on Windows 2008. I always get 11001.
Thanks for any help & best Regards, Alexander Svetov
...
in6_addr = record
s6_addr : array[0..15] of u_char;
end;
TInAddr6 = in6_addr;
sockaddr_in6 = record
sin6_family: short;
sin6_port: u_short;
sin6_flowinfo: u_long;
sin6_addr: TInAddr6;
sin6_scope_id: u_long;
end;
TSockAddrIn6 = sockaddr_in6;
// see http://msdn.microsoft.com/en-us/library/ms737530(VS.85).aspx
// for information about getaddrinfo
PAddrInfo = ^TAddrInfo;
TAddrInfo = record
ai_flags: integer;
ai_family: integer;
ai_socktype: integer;
ai_protocol: integer;
ai_addrlen: integer;
ai_canonname: PChar;
ai_addr: PSockAddr;
ai_next: PAddrInfo;
end;
function getaddrinfo(const NodeName, ServName: PChar; const Hints:
PAddrInfo; var Addrinfo: PAddrInfo): integer; stdcall; external 'ws2_32.dll';
procedure freeaddrinfo(ai: PAddrInfo); stdcall; external 'ws2_32.dll';
function connect6(s: TSocket; const name: sockaddr_in6; namelen:
Integer): integer; stdcall; external 'ws2_32.dll' name 'connect';
...
var
S: TSocket;
SData: TWSAData;
RetVal: integer;
Hints: TAddrInfo;
Addr: PAddrInfo;
IP4Addr: TSockAddrIn;
IP6Addr: TSockAddrIn6;
const
hostname = 'localhost';
begin
WSAStartup($0202, SData);
ZeroMemory(@Hints, sizeof(Hints));
Hints.ai_family := AF_UNSPEC;
Hints.ai_socktype := SOCK_STREAM;
Hints.ai_protocol := IPPROTO_TCP;
// Hints.ai_flags := AI_NUMERICHOST; // if we want to convert IP to sockaddr.
RetVal := GetAddrInfo(hostname, '80', @Hints, Addr);
if Retval = 0 then // success
begin
if (Addr <> nil) then Move(Addr^.ai_addr^, IP6Addr, Addr^.ai_addrlen);
end
else
begin
showmessage(inttostr(RetVal) + ' ' + SysErrorMessage(Retval));
end;
freeaddrinfo(addr);
S := Socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
RetVal := connect6(S, IP6Addr, SizeOf(TSockAddrIn6));
if Retval = 0 then // success
begin
showmessage('connect');
end
else
begin
showmessage(inttostr(RetVal) + ' ' + SysErrorMessage(Retval));
end;
CloseSocket(S);
WSACleanUp;
end;
--
To unsubscribe or change your settings for TWSocket mailing list
please goto http://lists.elists.org/cgi-bin/mailman/listinfo/twsocket
Visit our website at http://www.overbyte.be