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]
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to