[fpc-pascal] FPC and IPv6, and BSD

Mark Morgan Lloyd markMLl.fpc-pascal at telemetry.co.uk
Fri Jul 27 10:19:23 CEST 2012

ZAN DoYe wrote:
> On 2012-07-23 21:51, Mark Morgan Lloyd wrote:
>> I'm trying to write a simple finger daemon, capable of both IP4 and 
>> IP6. At present it's using an unprivileged socket so as to avoid 
>> problems on unix platforms.
>> I appear to be having problems at the bind() call for IP6 (returns 
>> -1), which I suspect is down to my incomplete understanding of the new 
>> sockaddr_in6 structure. Has anybody done this successfully?
> If you called fpBind, then check fpGetErrno to see what happened. If you 
> do called the bind function in libc. uses initc unit, and check the cerrno.

Thanks, the problem was entirely down to IP6 also binding IP4. I've 
coded to leave this as an option.

>> As a subsidiary question: noting that a client has to be aware of this:
>>   sockaddr_in6 = packed Record
>>     {$ifdef SOCK_HAS_SINLEN}  // as per RFC 2553
>>       sin6_len    : cuint8;
>>     {$endif}
>>     sin6_family   : sa_family_t;
>> ..
>> so that it initialises the sin6_len field if present (some BSD 
>> variants?), does it see that conditional automatically if defined? 
>> Otherwise how best to do it?
> You don't worry about the sin6_len field.
> `Even if the length field is present, we need never set it and need 
> never examine it, unless we are dealing with routing sockets. It is used 
> within the kernel by the routines that deal with socket address 
> structures from various protocol families.' --- UNP v1

Thanks very much for that, noted.

Remainder noted for reference.

Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]

More information about the fpc-pascal mailing list