2008-05-20 Thomas Quinot <quinot@adacore.com>
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 May 2008 12:43:29 +0000 (12:43 +0000)
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 20 May 2008 12:43:29 +0000 (12:43 +0000)
* Makefile.rtl (GNAT.Sockets.Thin_Common): New unit.

* g-sttsne-vxworks.adb: Add missing dependency on Sockets.Constants.
Add missing "with" of Ada.Unchecked_Conversion

* g-soccon-linux-ppc.ads, g-soccon-linux-64.ads, g-soccon-lynxos.ads,
g-soccon-linux-x86.ads, g-soccon-hpux-ia64.ads,
g-soccon-solaris-64.ads, g-soccon-tru64.ads, g-soccon-aix.ads,
g-soccon-irix.ads, g-soccon-hpux.ads, g-soccon-solaris.ads,
g-soccon-vms.ads, g-soccon-mingw.ads, g-soccon-vxworks.ads,
g-socthi-vxworks.adb, g-soccon-freebsd.ads, g-soccon.ads:
Move common code out of GNAT.Sockets.Thin implementations and into
Thin_Common.
New constant SIZEOF_fd_set
New flag Has_Sockaddr_Len
New constants SIZEOF_sockaddr_in, SIZEOF_sockaddr_in6

* g-stsifd-sockets.adb
(Create): Remove call to Set_Length; use Set_Family to set the family
and (on appropriate platforms) length fields in struct sockaddr.

* g-socthi.adb, g-socthi.ads, g-socthi-vms.ads, g-socthi-vms.adb,
g-socthi-mingw.adb, g-socthi-mingw.ads, g-socthi-vxworks.adb,
g-soccon-darwin.ads, g-soccon-darwin.ads: New constant SIZEOF_fd_set
Move common code out of GNAT.Sockets.Thin implementations and into
Thin_Common.

* g-socket.ads, g-socket.adb:
Move common code out of GNAT.Sockets.Thin implementations and into
Thin_Common.
(Connect_Socket, Accept_Socket): Provide new versions of these two
routines that operate with a user specified timeout.
(Bind_Socket, Connect_Socket, Send_Socket): Remove calls to Set_Length,
this is now handled automatically by Set_Family on platforms that
require it.

* gen-soccon.c:
Move common code out of GNAT.Sockets.Thin implementations and into
Thin_Common.
(SIZEOF_sockaddr_in6): On platforms where IPv6 is not supported, define
this constant to 0 (not -1) because we use it to initialize an
unsigned_char value.
Align values for numeric constants only.
Handle the case of systems that do not support AF_INET6.
New constant SIZEOF_fd_set
New flag Has_Sockaddr_Len
New constants SIZEOF_sockaddr_in, SIZEOF_sockaddr_in6

* gsocket.h: New flag Has_Sockaddr_Len
New constants SIZEOF_sockaddr_in, SIZEOF_sockaddr_in6

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@135612 138bc75d-0d04-0410-961f-82ee72b054a4

31 files changed:
gcc/ada/Makefile.rtl
gcc/ada/g-soccon-aix.ads
gcc/ada/g-soccon-darwin.ads
gcc/ada/g-soccon-freebsd.ads
gcc/ada/g-soccon-hpux-ia64.ads
gcc/ada/g-soccon-hpux.ads
gcc/ada/g-soccon-irix.ads
gcc/ada/g-soccon-linux-64.ads
gcc/ada/g-soccon-linux-ppc.ads
gcc/ada/g-soccon-linux-x86.ads
gcc/ada/g-soccon-lynxos.ads
gcc/ada/g-soccon-mingw.ads
gcc/ada/g-soccon-solaris-64.ads
gcc/ada/g-soccon-solaris.ads
gcc/ada/g-soccon-tru64.ads
gcc/ada/g-soccon-vms.ads
gcc/ada/g-soccon-vxworks.ads
gcc/ada/g-soccon.ads
gcc/ada/g-socket.adb
gcc/ada/g-socket.ads
gcc/ada/g-socthi-mingw.adb
gcc/ada/g-socthi-mingw.ads
gcc/ada/g-socthi-vms.adb
gcc/ada/g-socthi-vms.ads
gcc/ada/g-socthi-vxworks.adb
gcc/ada/g-socthi.adb
gcc/ada/g-socthi.ads
gcc/ada/g-stsifd-sockets.adb
gcc/ada/g-sttsne-vxworks.adb
gcc/ada/gen-soccon.c
gcc/ada/gsocket.h

index 755fa31..66dfea8 100644 (file)
@@ -368,6 +368,7 @@ GNATRTL_NONTASKING_OBJS= \
   g-socket$(objext) \
   g-socthi$(objext) \
   g-soliop$(objext) \
+  g-sothco$(objext) \
   g-souinf$(objext) \
   g-speche$(objext) \
   g-spchge$(objext) \
index 5b36015..c0a1503 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          24; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          24; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           1; --  Stream socket
-   SOCK_DGRAM         : constant :=           2; --  Datagram socket
+   SOCK_STREAM         : constant :=           1; --  Stream socket
+   SOCK_DGRAM          : constant :=           2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=          67; --  Address already in use
-   EADDRNOTAVAIL      : constant :=          68; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=          66; --  Addr family not supported
-   EALREADY           : constant :=          56; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=          72; --  Connection aborted
-   ECONNREFUSED       : constant :=          79; --  Connection refused
-   ECONNRESET         : constant :=          73; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=          58; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=          80; --  Host is down
-   EHOSTUNREACH       : constant :=          81; --  No route to host
-   EINPROGRESS        : constant :=          55; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=          75; --  Socket already connected
-   ELOOP              : constant :=          85; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=          59; --  Message too long
-   ENAMETOOLONG       : constant :=          86; --  Name too long
-   ENETDOWN           : constant :=          69; --  Network is down
-   ENETRESET          : constant :=          71; --  Disconn. on network reset
-   ENETUNREACH        : constant :=          70; --  Network is unreachable
-   ENOBUFS            : constant :=          74; --  No buffer space available
-   ENOPROTOOPT        : constant :=          61; --  Protocol not available
-   ENOTCONN           : constant :=          76; --  Socket not connected
-   ENOTSOCK           : constant :=          57; --  Operation on non socket
-   EOPNOTSUPP         : constant :=          64; --  Operation not supported
-   EPFNOSUPPORT       : constant :=          65; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=          62; --  Unknown protocol
-   EPROTOTYPE         : constant :=          60; --  Unknown protocol type
-   ESHUTDOWN          : constant :=          77; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=          63; --  Socket type not supported
-   ETIMEDOUT          : constant :=          78; --  Connection timed out
-   ETOOMANYREFS       : constant :=         115; --  Too many references
-   EWOULDBLOCK        : constant :=          11; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=          67; --  Address already in use
+   EADDRNOTAVAIL       : constant :=          68; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=          66; --  Addr family not supported
+   EALREADY            : constant :=          56; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=          72; --  Connection aborted
+   ECONNREFUSED        : constant :=          79; --  Connection refused
+   ECONNRESET          : constant :=          73; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=          58; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=          80; --  Host is down
+   EHOSTUNREACH        : constant :=          81; --  No route to host
+   EINPROGRESS         : constant :=          55; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=          75; --  Socket already connected
+   ELOOP               : constant :=          85; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=          59; --  Message too long
+   ENAMETOOLONG        : constant :=          86; --  Name too long
+   ENETDOWN            : constant :=          69; --  Network is down
+   ENETRESET           : constant :=          71; --  Disconn. on network reset
+   ENETUNREACH         : constant :=          70; --  Network is unreachable
+   ENOBUFS             : constant :=          74; --  No buffer space available
+   ENOPROTOOPT         : constant :=          61; --  Protocol not available
+   ENOTCONN            : constant :=          76; --  Socket not connected
+   ENOTSOCK            : constant :=          57; --  Operation on non socket
+   EOPNOTSUPP          : constant :=          64; --  Operation not supported
+   EPFNOSUPPORT        : constant :=          65; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=          62; --  Unknown protocol
+   EPROTOTYPE          : constant :=          60; --  Unknown protocol type
+   ESHUTDOWN           : constant :=          77; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=          63; --  Socket type not supported
+   ETIMEDOUT           : constant :=          78; --  Connection timed out
+   ETOOMANYREFS        : constant :=         115; --  Too many references
+   EWOULDBLOCK         : constant :=          11; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=          64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=          64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=         512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           9; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=          10; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=          11; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=          12; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=          13; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=           9; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          10; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          11; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          12; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          13; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=          16; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=          16; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=        8192; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           0; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           0; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index 8b4ac61..7e79224 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  by the GNAT.Sockets package (g-socket.ads). This package should not be
 --  directly with'ed by an applications program.
 
---  This is the version for powerpc-apple-darwin8.9.0
+--  This is the version for i386-apple-darwin8.8.4
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          30; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          30; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           1; --  Stream socket
-   SOCK_DGRAM         : constant :=           2; --  Datagram socket
+   SOCK_STREAM         : constant :=           1; --  Stream socket
+   SOCK_DGRAM          : constant :=           2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=          48; --  Address already in use
-   EADDRNOTAVAIL      : constant :=          49; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=          47; --  Addr family not supported
-   EALREADY           : constant :=          37; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=          53; --  Connection aborted
-   ECONNREFUSED       : constant :=          61; --  Connection refused
-   ECONNRESET         : constant :=          54; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=          39; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=          64; --  Host is down
-   EHOSTUNREACH       : constant :=          65; --  No route to host
-   EINPROGRESS        : constant :=          36; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=          56; --  Socket already connected
-   ELOOP              : constant :=          62; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=          40; --  Message too long
-   ENAMETOOLONG       : constant :=          63; --  Name too long
-   ENETDOWN           : constant :=          50; --  Network is down
-   ENETRESET          : constant :=          52; --  Disconn. on network reset
-   ENETUNREACH        : constant :=          51; --  Network is unreachable
-   ENOBUFS            : constant :=          55; --  No buffer space available
-   ENOPROTOOPT        : constant :=          42; --  Protocol not available
-   ENOTCONN           : constant :=          57; --  Socket not connected
-   ENOTSOCK           : constant :=          38; --  Operation on non socket
-   EOPNOTSUPP         : constant :=          45; --  Operation not supported
-   EPFNOSUPPORT       : constant :=          46; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=          43; --  Unknown protocol
-   EPROTOTYPE         : constant :=          41; --  Unknown protocol type
-   ESHUTDOWN          : constant :=          58; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=          44; --  Socket type not supported
-   ETIMEDOUT          : constant :=          60; --  Connection timed out
-   ETOOMANYREFS       : constant :=          59; --  Too many references
-   EWOULDBLOCK        : constant :=          35; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=          48; --  Address already in use
+   EADDRNOTAVAIL       : constant :=          49; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=          47; --  Addr family not supported
+   EALREADY            : constant :=          37; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=          53; --  Connection aborted
+   ECONNREFUSED        : constant :=          61; --  Connection refused
+   ECONNRESET          : constant :=          54; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=          39; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=          64; --  Host is down
+   EHOSTUNREACH        : constant :=          65; --  No route to host
+   EINPROGRESS         : constant :=          36; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=          56; --  Socket already connected
+   ELOOP               : constant :=          62; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=          40; --  Message too long
+   ENAMETOOLONG        : constant :=          63; --  Name too long
+   ENETDOWN            : constant :=          50; --  Network is down
+   ENETRESET           : constant :=          52; --  Disconn. on network reset
+   ENETUNREACH         : constant :=          51; --  Network is unreachable
+   ENOBUFS             : constant :=          55; --  No buffer space available
+   ENOPROTOOPT         : constant :=          42; --  Protocol not available
+   ENOTCONN            : constant :=          57; --  Socket not connected
+   ENOTSOCK            : constant :=          38; --  Operation on non socket
+   EOPNOTSUPP          : constant :=          45; --  Operation not supported
+   EPFNOSUPPORT        : constant :=          46; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=          43; --  Unknown protocol
+   EPROTOTYPE          : constant :=          41; --  Unknown protocol type
+   ESHUTDOWN           : constant :=          58; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=          44; --  Socket type not supported
+   ETIMEDOUT           : constant :=          60; --  Connection timed out
+   ETOOMANYREFS        : constant :=          59; --  Too many references
+   EWOULDBLOCK         : constant :=          35; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=          64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=          64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=         512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           9; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=          10; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=          11; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=          12; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=          13; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=           9; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          10; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          11; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          12; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          13; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=        1024; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=        1024; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         128; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           0; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           0; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index 14fbf9d..8af0908 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          28; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          28; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           1; --  Stream socket
-   SOCK_DGRAM         : constant :=           2; --  Datagram socket
+   SOCK_STREAM         : constant :=           1; --  Stream socket
+   SOCK_DGRAM          : constant :=           2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=          48; --  Address already in use
-   EADDRNOTAVAIL      : constant :=          49; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=          47; --  Addr family not supported
-   EALREADY           : constant :=          37; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=          53; --  Connection aborted
-   ECONNREFUSED       : constant :=          61; --  Connection refused
-   ECONNRESET         : constant :=          54; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=          39; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=          64; --  Host is down
-   EHOSTUNREACH       : constant :=          65; --  No route to host
-   EINPROGRESS        : constant :=          36; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=          56; --  Socket already connected
-   ELOOP              : constant :=          62; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=          40; --  Message too long
-   ENAMETOOLONG       : constant :=          63; --  Name too long
-   ENETDOWN           : constant :=          50; --  Network is down
-   ENETRESET          : constant :=          52; --  Disconn. on network reset
-   ENETUNREACH        : constant :=          51; --  Network is unreachable
-   ENOBUFS            : constant :=          55; --  No buffer space available
-   ENOPROTOOPT        : constant :=          42; --  Protocol not available
-   ENOTCONN           : constant :=          57; --  Socket not connected
-   ENOTSOCK           : constant :=          38; --  Operation on non socket
-   EOPNOTSUPP         : constant :=          45; --  Operation not supported
-   EPFNOSUPPORT       : constant :=          46; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=          43; --  Unknown protocol
-   EPROTOTYPE         : constant :=          41; --  Unknown protocol type
-   ESHUTDOWN          : constant :=          58; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=          44; --  Socket type not supported
-   ETIMEDOUT          : constant :=          60; --  Connection timed out
-   ETOOMANYREFS       : constant :=          59; --  Too many references
-   EWOULDBLOCK        : constant :=          35; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=          48; --  Address already in use
+   EADDRNOTAVAIL       : constant :=          49; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=          47; --  Addr family not supported
+   EALREADY            : constant :=          37; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=          53; --  Connection aborted
+   ECONNREFUSED        : constant :=          61; --  Connection refused
+   ECONNRESET          : constant :=          54; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=          39; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=          64; --  Host is down
+   EHOSTUNREACH        : constant :=          65; --  No route to host
+   EINPROGRESS         : constant :=          36; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=          56; --  Socket already connected
+   ELOOP               : constant :=          62; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=          40; --  Message too long
+   ENAMETOOLONG        : constant :=          63; --  Name too long
+   ENETDOWN            : constant :=          50; --  Network is down
+   ENETRESET           : constant :=          52; --  Disconn. on network reset
+   ENETUNREACH         : constant :=          51; --  Network is unreachable
+   ENOBUFS             : constant :=          55; --  No buffer space available
+   ENOPROTOOPT         : constant :=          42; --  Protocol not available
+   ENOTCONN            : constant :=          57; --  Socket not connected
+   ENOTSOCK            : constant :=          38; --  Operation on non socket
+   EOPNOTSUPP          : constant :=          45; --  Operation not supported
+   EPFNOSUPPORT        : constant :=          46; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=          43; --  Unknown protocol
+   EPROTOTYPE          : constant :=          41; --  Unknown protocol type
+   ESHUTDOWN           : constant :=          58; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=          44; --  Socket type not supported
+   ETIMEDOUT           : constant :=          60; --  Connection timed out
+   ETOOMANYREFS        : constant :=          59; --  Too many references
+   EWOULDBLOCK         : constant :=          35; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=          64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=      131072; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=          64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=      131072; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=         512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           9; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=          10; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=          11; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=          12; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=          13; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=           9; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          10; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          11; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          12; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          13; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=        1024; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=        1024; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         128; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           0; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           0; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           1; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index 38e287e..4c364bd 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          22; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          22; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           1; --  Stream socket
-   SOCK_DGRAM         : constant :=           2; --  Datagram socket
+   SOCK_STREAM         : constant :=           1; --  Stream socket
+   SOCK_DGRAM          : constant :=           2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=         226; --  Address already in use
-   EADDRNOTAVAIL      : constant :=         227; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=         225; --  Addr family not supported
-   EALREADY           : constant :=         244; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=         231; --  Connection aborted
-   ECONNREFUSED       : constant :=         239; --  Connection refused
-   ECONNRESET         : constant :=         232; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=         217; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=         241; --  Host is down
-   EHOSTUNREACH       : constant :=         242; --  No route to host
-   EINPROGRESS        : constant :=         245; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=         234; --  Socket already connected
-   ELOOP              : constant :=         249; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=         218; --  Message too long
-   ENAMETOOLONG       : constant :=         248; --  Name too long
-   ENETDOWN           : constant :=         228; --  Network is down
-   ENETRESET          : constant :=         230; --  Disconn. on network reset
-   ENETUNREACH        : constant :=         229; --  Network is unreachable
-   ENOBUFS            : constant :=         233; --  No buffer space available
-   ENOPROTOOPT        : constant :=         220; --  Protocol not available
-   ENOTCONN           : constant :=         235; --  Socket not connected
-   ENOTSOCK           : constant :=         216; --  Operation on non socket
-   EOPNOTSUPP         : constant :=         223; --  Operation not supported
-   EPFNOSUPPORT       : constant :=         224; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=         221; --  Unknown protocol
-   EPROTOTYPE         : constant :=         219; --  Unknown protocol type
-   ESHUTDOWN          : constant :=         236; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=         222; --  Socket type not supported
-   ETIMEDOUT          : constant :=         238; --  Connection timed out
-   ETOOMANYREFS       : constant :=         237; --  Too many references
-   EWOULDBLOCK        : constant :=         246; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=         226; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         227; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         225; --  Addr family not supported
+   EALREADY            : constant :=         244; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=         231; --  Connection aborted
+   ECONNREFUSED        : constant :=         239; --  Connection refused
+   ECONNRESET          : constant :=         232; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=         217; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=         241; --  Host is down
+   EHOSTUNREACH        : constant :=         242; --  No route to host
+   EINPROGRESS         : constant :=         245; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=         234; --  Socket already connected
+   ELOOP               : constant :=         249; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=         218; --  Message too long
+   ENAMETOOLONG        : constant :=         248; --  Name too long
+   ENETDOWN            : constant :=         228; --  Network is down
+   ENETRESET           : constant :=         230; --  Disconn. on network reset
+   ENETUNREACH         : constant :=         229; --  Network is unreachable
+   ENOBUFS             : constant :=         233; --  No buffer space available
+   ENOPROTOOPT         : constant :=         220; --  Protocol not available
+   ENOTCONN            : constant :=         235; --  Socket not connected
+   ENOTSOCK            : constant :=         216; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         223; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         224; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         221; --  Unknown protocol
+   EPROTOTYPE          : constant :=         219; --  Unknown protocol type
+   ESHUTDOWN           : constant :=         236; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         222; --  Socket type not supported
+   ETIMEDOUT           : constant :=         238; --  Connection timed out
+   ETOOMANYREFS        : constant :=         237; --  Too many references
+   EWOULDBLOCK         : constant :=         246; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=          64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=          64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=         512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           2; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=           3; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=           4; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=           5; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=           6; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=           2; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=           3; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=           4; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=           5; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=           6; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=          16; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=          16; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           8; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           8; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           8; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           8; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         256; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           0; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           0; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index c1851fa..c49075d 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          -1; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          -1; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           1; --  Stream socket
-   SOCK_DGRAM         : constant :=           2; --  Datagram socket
+   SOCK_STREAM         : constant :=           1; --  Stream socket
+   SOCK_DGRAM          : constant :=           2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=         226; --  Address already in use
-   EADDRNOTAVAIL      : constant :=         227; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=         225; --  Addr family not supported
-   EALREADY           : constant :=         244; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=         231; --  Connection aborted
-   ECONNREFUSED       : constant :=         239; --  Connection refused
-   ECONNRESET         : constant :=         232; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=         217; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=         241; --  Host is down
-   EHOSTUNREACH       : constant :=         242; --  No route to host
-   EINPROGRESS        : constant :=         245; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=         234; --  Socket already connected
-   ELOOP              : constant :=         249; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=         218; --  Message too long
-   ENAMETOOLONG       : constant :=         248; --  Name too long
-   ENETDOWN           : constant :=         228; --  Network is down
-   ENETRESET          : constant :=         230; --  Disconn. on network reset
-   ENETUNREACH        : constant :=         229; --  Network is unreachable
-   ENOBUFS            : constant :=         233; --  No buffer space available
-   ENOPROTOOPT        : constant :=         220; --  Protocol not available
-   ENOTCONN           : constant :=         235; --  Socket not connected
-   ENOTSOCK           : constant :=         216; --  Operation on non socket
-   EOPNOTSUPP         : constant :=         223; --  Operation not supported
-   EPFNOSUPPORT       : constant :=         224; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=         221; --  Unknown protocol
-   EPROTOTYPE         : constant :=         219; --  Unknown protocol type
-   ESHUTDOWN          : constant :=         236; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=         222; --  Socket type not supported
-   ETIMEDOUT          : constant :=         238; --  Connection timed out
-   ETOOMANYREFS       : constant :=         237; --  Too many references
-   EWOULDBLOCK        : constant :=         246; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=         226; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         227; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         225; --  Addr family not supported
+   EALREADY            : constant :=         244; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=         231; --  Connection aborted
+   ECONNREFUSED        : constant :=         239; --  Connection refused
+   ECONNRESET          : constant :=         232; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=         217; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=         241; --  Host is down
+   EHOSTUNREACH        : constant :=         242; --  No route to host
+   EINPROGRESS         : constant :=         245; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=         234; --  Socket already connected
+   ELOOP               : constant :=         249; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=         218; --  Message too long
+   ENAMETOOLONG        : constant :=         248; --  Name too long
+   ENETDOWN            : constant :=         228; --  Network is down
+   ENETRESET           : constant :=         230; --  Disconn. on network reset
+   ENETUNREACH         : constant :=         229; --  Network is unreachable
+   ENOBUFS             : constant :=         233; --  No buffer space available
+   ENOPROTOOPT         : constant :=         220; --  Protocol not available
+   ENOTCONN            : constant :=         235; --  Socket not connected
+   ENOTSOCK            : constant :=         216; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         223; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         224; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         221; --  Unknown protocol
+   EPROTOTYPE          : constant :=         219; --  Unknown protocol type
+   ESHUTDOWN           : constant :=         236; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         222; --  Socket type not supported
+   ETIMEDOUT           : constant :=         238; --  Connection timed out
+   ETOOMANYREFS        : constant :=         237; --  Too many references
+   EWOULDBLOCK         : constant :=         246; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=          64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=          64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=         512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           2; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=           3; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=           4; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=           5; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=           6; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=           2; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=           3; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=           4; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=           5; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=           6; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=          16; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=          16; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=           0; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         256; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           0; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           0; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index a00ff05..3952a59 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          24; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          24; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           2; --  Stream socket
-   SOCK_DGRAM         : constant :=           1; --  Datagram socket
+   SOCK_STREAM         : constant :=           2; --  Stream socket
+   SOCK_DGRAM          : constant :=           1; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=         125; --  Address already in use
-   EADDRNOTAVAIL      : constant :=         126; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=         124; --  Addr family not supported
-   EALREADY           : constant :=         149; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=         130; --  Connection aborted
-   ECONNREFUSED       : constant :=         146; --  Connection refused
-   ECONNRESET         : constant :=         131; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=          96; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=         147; --  Host is down
-   EHOSTUNREACH       : constant :=         148; --  No route to host
-   EINPROGRESS        : constant :=         150; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=         133; --  Socket already connected
-   ELOOP              : constant :=          90; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=          97; --  Message too long
-   ENAMETOOLONG       : constant :=          78; --  Name too long
-   ENETDOWN           : constant :=         127; --  Network is down
-   ENETRESET          : constant :=         129; --  Disconn. on network reset
-   ENETUNREACH        : constant :=         128; --  Network is unreachable
-   ENOBUFS            : constant :=         132; --  No buffer space available
-   ENOPROTOOPT        : constant :=          99; --  Protocol not available
-   ENOTCONN           : constant :=         134; --  Socket not connected
-   ENOTSOCK           : constant :=          95; --  Operation on non socket
-   EOPNOTSUPP         : constant :=         122; --  Operation not supported
-   EPFNOSUPPORT       : constant :=         123; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=         120; --  Unknown protocol
-   EPROTOTYPE         : constant :=          98; --  Unknown protocol type
-   ESHUTDOWN          : constant :=         143; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=         121; --  Socket type not supported
-   ETIMEDOUT          : constant :=         145; --  Connection timed out
-   ETOOMANYREFS       : constant :=         144; --  Too many references
-   EWOULDBLOCK        : constant :=          11; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=         125; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         126; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         124; --  Addr family not supported
+   EALREADY            : constant :=         149; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=         130; --  Connection aborted
+   ECONNREFUSED        : constant :=         146; --  Connection refused
+   ECONNRESET          : constant :=         131; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=          96; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=         147; --  Host is down
+   EHOSTUNREACH        : constant :=         148; --  No route to host
+   EINPROGRESS         : constant :=         150; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=         133; --  Socket already connected
+   ELOOP               : constant :=          90; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=          97; --  Message too long
+   ENAMETOOLONG        : constant :=          78; --  Name too long
+   ENETDOWN            : constant :=         127; --  Network is down
+   ENETRESET           : constant :=         129; --  Disconn. on network reset
+   ENETUNREACH         : constant :=         128; --  Network is unreachable
+   ENOBUFS             : constant :=         132; --  No buffer space available
+   ENOPROTOOPT         : constant :=          99; --  Protocol not available
+   ENOTCONN            : constant :=         134; --  Socket not connected
+   ENOTSOCK            : constant :=          95; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         122; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         123; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         120; --  Unknown protocol
+   EPROTOTYPE          : constant :=          98; --  Unknown protocol type
+   ESHUTDOWN           : constant :=         143; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         121; --  Socket type not supported
+   ETIMEDOUT           : constant :=         145; --  Connection timed out
+   ETOOMANYREFS        : constant :=         144; --  Too many references
+   EWOULDBLOCK         : constant :=          11; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=          64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=          64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=         512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=          20; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=          21; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=          22; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=          23; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=          24; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=          20; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          21; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          22; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          23; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          24; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=  2147483647; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=  2147483647; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          32; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         128; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           1; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index cd4332d..3d82b32 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=            2; --  IPv4 address family
-   AF_INET6           : constant :=           10; --  IPv6 address family
+   AF_INET             : constant :=          2; --  IPv4 address family
+   AF_INET6            : constant :=         10; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=            1; --  Stream socket
-   SOCK_DGRAM         : constant :=            2; --  Datagram socket
+   SOCK_STREAM         : constant :=          1; --  Stream socket
+   SOCK_DGRAM          : constant :=          2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=           13; --  Permission denied
-   EADDRINUSE         : constant :=           98; --  Address already in use
-   EADDRNOTAVAIL      : constant :=           99; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=           97; --  Addr family not supported
-   EALREADY           : constant :=          114; --  Operation in progress
-   EBADF              : constant :=            9; --  Bad file descriptor
-   ECONNABORTED       : constant :=          103; --  Connection aborted
-   ECONNREFUSED       : constant :=          111; --  Connection refused
-   ECONNRESET         : constant :=          104; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=           89; --  Destination addr required
-   EFAULT             : constant :=           14; --  Bad address
-   EHOSTDOWN          : constant :=          112; --  Host is down
-   EHOSTUNREACH       : constant :=          113; --  No route to host
-   EINPROGRESS        : constant :=          115; --  Operation now in progress
-   EINTR              : constant :=            4; --  Interrupted system call
-   EINVAL             : constant :=           22; --  Invalid argument
-   EIO                : constant :=            5; --  Input output error
-   EISCONN            : constant :=          106; --  Socket already connected
-   ELOOP              : constant :=           40; --  Too many symbolic links
-   EMFILE             : constant :=           24; --  Too many open files
-   EMSGSIZE           : constant :=           90; --  Message too long
-   ENAMETOOLONG       : constant :=           36; --  Name too long
-   ENETDOWN           : constant :=          100; --  Network is down
-   ENETRESET          : constant :=          102; --  Disconn. on network reset
-   ENETUNREACH        : constant :=          101; --  Network is unreachable
-   ENOBUFS            : constant :=          105; --  No buffer space available
-   ENOPROTOOPT        : constant :=           92; --  Protocol not available
-   ENOTCONN           : constant :=          107; --  Socket not connected
-   ENOTSOCK           : constant :=           88; --  Operation on non socket
-   EOPNOTSUPP         : constant :=           95; --  Operation not supported
-   EPFNOSUPPORT       : constant :=           96; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=           93; --  Unknown protocol
-   EPROTOTYPE         : constant :=           91; --  Unknown protocol type
-   ESHUTDOWN          : constant :=          108; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=           94; --  Socket type not supported
-   ETIMEDOUT          : constant :=          110; --  Connection timed out
-   ETOOMANYREFS       : constant :=          109; --  Too many references
-   EWOULDBLOCK        : constant :=           11; --  Operation would block
+   EACCES              : constant :=         13; --  Permission denied
+   EADDRINUSE          : constant :=         98; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         99; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         97; --  Addr family not supported
+   EALREADY            : constant :=        114; --  Operation in progress
+   EBADF               : constant :=          9; --  Bad file descriptor
+   ECONNABORTED        : constant :=        103; --  Connection aborted
+   ECONNREFUSED        : constant :=        111; --  Connection refused
+   ECONNRESET          : constant :=        104; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=         89; --  Destination addr required
+   EFAULT              : constant :=         14; --  Bad address
+   EHOSTDOWN           : constant :=        112; --  Host is down
+   EHOSTUNREACH        : constant :=        113; --  No route to host
+   EINPROGRESS         : constant :=        115; --  Operation now in progress
+   EINTR               : constant :=          4; --  Interrupted system call
+   EINVAL              : constant :=         22; --  Invalid argument
+   EIO                 : constant :=          5; --  Input output error
+   EISCONN             : constant :=        106; --  Socket already connected
+   ELOOP               : constant :=         40; --  Too many symbolic links
+   EMFILE              : constant :=         24; --  Too many open files
+   EMSGSIZE            : constant :=         90; --  Message too long
+   ENAMETOOLONG        : constant :=         36; --  Name too long
+   ENETDOWN            : constant :=        100; --  Network is down
+   ENETRESET           : constant :=        102; --  Disconn. on network reset
+   ENETUNREACH         : constant :=        101; --  Network is unreachable
+   ENOBUFS             : constant :=        105; --  No buffer space available
+   ENOPROTOOPT         : constant :=         92; --  Protocol not available
+   ENOTCONN            : constant :=        107; --  Socket not connected
+   ENOTSOCK            : constant :=         88; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         95; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         96; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         93; --  Unknown protocol
+   EPROTOTYPE          : constant :=         91; --  Unknown protocol type
+   ESHUTDOWN           : constant :=        108; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         94; --  Socket type not supported
+   ETIMEDOUT           : constant :=        110; --  Connection timed out
+   ETOOMANYREFS        : constant :=        109; --  Too many references
+   EWOULDBLOCK         : constant :=         11; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-   TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-   NO_DATA            : constant :=            4; --  No data record for name
-   NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=          1; --  Unknown host
+   TRY_AGAIN           : constant :=          2; --  Host name lookup failure
+   NO_DATA             : constant :=          4; --  No data record for name
+   NO_RECOVERY         : constant :=          3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant :=        21537; --  Set/clear non-blocking io
-   FIONREAD           : constant :=        21531; --  How many bytes to read
+   FIONBIO             : constant :=      21537; --  Set/clear non-blocking io
+   FIONREAD            : constant :=      21531; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=            0; --  No more recv
-   SHUT_WR            : constant :=            1; --  No more send
-   SHUT_RDWR          : constant :=            2; --  No more recv/send
+   SHUT_RD             : constant :=          0; --  No more recv
+   SHUT_WR             : constant :=          1; --  No more send
+   SHUT_RDWR           : constant :=          2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=            1; --  Options for socket level
-   IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=           17; --  UDP
-   IPPROTO_TCP        : constant :=            6; --  TCP
+   SOL_SOCKET          : constant :=          1; --  Options for socket level
+   IPPROTO_IP          : constant :=          0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=         17; --  UDP
+   IPPROTO_TCP         : constant :=          6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=            1; --  Process out-of-band data
-   MSG_PEEK           : constant :=            2; --  Peek at incoming data
-   MSG_EOR            : constant :=          128; --  Send end of record
-   MSG_WAITALL        : constant :=          256; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=        16384; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant := MSG_NOSIGNAL;
+   MSG_OOB             : constant :=          1; --  Process out-of-band data
+   MSG_PEEK            : constant :=          2; --  Peek at incoming data
+   MSG_EOR             : constant :=        128; --  Send end of record
+   MSG_WAITALL         : constant :=        256; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=      16384; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant := MSG_NOSIGNAL;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=            2; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=           -1; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=            9; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=           13; --  Defer close to flush data
-   SO_BROADCAST       : constant :=            6; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=            7; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=            8; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=           21; --  Emission timeout
-   SO_RCVTIMEO        : constant :=           20; --  Reception timeout
-   SO_ERROR           : constant :=            4; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           32; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=           33; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=           34; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=           35; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=           36; --  Leave a multicast group
-   IP_PKTINFO         : constant :=            8; --  Get datagram info
+   TCP_NODELAY         : constant :=          1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=          2; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         -1; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=          9; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         13; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          6; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=          7; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=          8; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=         21; --  Emission timeout
+   SO_RCVTIMEO         : constant :=         20; --  Reception timeout
+   SO_ERROR            : constant :=          4; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=         32; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=         33; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=         34; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=         35; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=         36; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          8; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=   2147483647; --  Maximum writev iovcnt
+   IOV_MAX             : constant := 2147483647; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=            8; --  tv_sec
-   SIZEOF_tv_usec     : constant :=            8; --  tv_usec
+   SIZEOF_tv_sec       : constant :=          8; --  tv_sec
+   SIZEOF_tv_usec      : constant :=          8; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=         16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=         28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=        128; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=            1; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=          1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=          0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index 4ae8556..7a8c2e2 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  by the GNAT.Sockets package (g-socket.ads). This package should not be
 --  directly with'ed by an applications program.
 
---  This is the version for powerpc-linux
+--  This is the version for ppc-unknown-linux-gnu
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=            2; --  IPv4 address family
-   AF_INET6           : constant :=           10; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          10; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=            1; --  Stream socket
-   SOCK_DGRAM         : constant :=            2; --  Datagram socket
+   SOCK_STREAM         : constant :=           1; --  Stream socket
+   SOCK_DGRAM          : constant :=           2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=           13; --  Permission denied
-   EADDRINUSE         : constant :=           98; --  Address already in use
-   EADDRNOTAVAIL      : constant :=           99; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=           97; --  Addr family not supported
-   EALREADY           : constant :=          114; --  Operation in progress
-   EBADF              : constant :=            9; --  Bad file descriptor
-   ECONNABORTED       : constant :=          103; --  Connection aborted
-   ECONNREFUSED       : constant :=          111; --  Connection refused
-   ECONNRESET         : constant :=          104; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=           89; --  Destination addr required
-   EFAULT             : constant :=           14; --  Bad address
-   EHOSTDOWN          : constant :=          112; --  Host is down
-   EHOSTUNREACH       : constant :=          113; --  No route to host
-   EINPROGRESS        : constant :=          115; --  Operation now in progress
-   EINTR              : constant :=            4; --  Interrupted system call
-   EINVAL             : constant :=           22; --  Invalid argument
-   EIO                : constant :=            5; --  Input output error
-   EISCONN            : constant :=          106; --  Socket already connected
-   ELOOP              : constant :=           40; --  Too many symbolic links
-   EMFILE             : constant :=           24; --  Too many open files
-   EMSGSIZE           : constant :=           90; --  Message too long
-   ENAMETOOLONG       : constant :=           36; --  Name too long
-   ENETDOWN           : constant :=          100; --  Network is down
-   ENETRESET          : constant :=          102; --  Disconn. on network reset
-   ENETUNREACH        : constant :=          101; --  Network is unreachable
-   ENOBUFS            : constant :=          105; --  No buffer space available
-   ENOPROTOOPT        : constant :=           92; --  Protocol not available
-   ENOTCONN           : constant :=          107; --  Socket not connected
-   ENOTSOCK           : constant :=           88; --  Operation on non socket
-   EOPNOTSUPP         : constant :=           95; --  Operation not supported
-   EPFNOSUPPORT       : constant :=           96; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=           93; --  Unknown protocol
-   EPROTOTYPE         : constant :=           91; --  Unknown protocol type
-   ESHUTDOWN          : constant :=          108; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=           94; --  Socket type not supported
-   ETIMEDOUT          : constant :=          110; --  Connection timed out
-   ETOOMANYREFS       : constant :=          109; --  Too many references
-   EWOULDBLOCK        : constant :=           11; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=          98; --  Address already in use
+   EADDRNOTAVAIL       : constant :=          99; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=          97; --  Addr family not supported
+   EALREADY            : constant :=         114; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=         103; --  Connection aborted
+   ECONNREFUSED        : constant :=         111; --  Connection refused
+   ECONNRESET          : constant :=         104; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=          89; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=         112; --  Host is down
+   EHOSTUNREACH        : constant :=         113; --  No route to host
+   EINPROGRESS         : constant :=         115; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=         106; --  Socket already connected
+   ELOOP               : constant :=          40; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=          90; --  Message too long
+   ENAMETOOLONG        : constant :=          36; --  Name too long
+   ENETDOWN            : constant :=         100; --  Network is down
+   ENETRESET           : constant :=         102; --  Disconn. on network reset
+   ENETUNREACH         : constant :=         101; --  Network is unreachable
+   ENOBUFS             : constant :=         105; --  No buffer space available
+   ENOPROTOOPT         : constant :=          92; --  Protocol not available
+   ENOTCONN            : constant :=         107; --  Socket not connected
+   ENOTSOCK            : constant :=          88; --  Operation on non socket
+   EOPNOTSUPP          : constant :=          95; --  Operation not supported
+   EPFNOSUPPORT        : constant :=          96; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=          93; --  Unknown protocol
+   EPROTOTYPE          : constant :=          91; --  Unknown protocol type
+   ESHUTDOWN           : constant :=         108; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=          94; --  Socket type not supported
+   ETIMEDOUT           : constant :=         110; --  Connection timed out
+   ETOOMANYREFS        : constant :=         109; --  Too many references
+   EWOULDBLOCK         : constant :=          11; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-   TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-   NO_DATA            : constant :=            4; --  No data record for name
-   NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant :=  -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=   1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=            0; --  No more recv
-   SHUT_WR            : constant :=            1; --  No more send
-   SHUT_RDWR          : constant :=            2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=            1; --  Options for socket level
-   IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=           17; --  UDP
-   IPPROTO_TCP        : constant :=            6; --  TCP
+   SOL_SOCKET          : constant :=           1; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=            1; --  Process out-of-band data
-   MSG_PEEK           : constant :=            2; --  Peek at incoming data
-   MSG_EOR            : constant :=          128; --  Send end of record
-   MSG_WAITALL        : constant :=          256; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=        16384; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant := MSG_NOSIGNAL;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=         128; --  Send end of record
+   MSG_WAITALL         : constant :=         256; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=       16384; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant := MSG_NOSIGNAL;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=            2; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=           -1; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=            9; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=           13; --  Defer close to flush data
-   SO_BROADCAST       : constant :=            6; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=            7; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=            8; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=           19; --  Emission timeout
-   SO_RCVTIMEO        : constant :=           18; --  Reception timeout
-   SO_ERROR           : constant :=            4; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           32; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=           33; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=           34; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=           35; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=           36; --  Leave a multicast group
-   IP_PKTINFO         : constant :=            8; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           2; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=          -1; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           9; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=          13; --  Defer close to flush data
+   SO_BROADCAST        : constant :=           6; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=           7; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=           8; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=          19; --  Emission timeout
+   SO_RCVTIMEO         : constant :=          18; --  Reception timeout
+   SO_ERROR            : constant :=           4; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=          32; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          33; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          34; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          35; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          36; --  Leave a multicast group
+   IP_PKTINFO          : constant :=           8; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=   2147483647; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=  2147483647; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=            4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=            4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         128; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=            1; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index b1c9188..ed2b8d9 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=            2; --  IPv4 address family
-   AF_INET6           : constant :=           10; --  IPv6 address family
+   AF_INET             : constant :=          2; --  IPv4 address family
+   AF_INET6            : constant :=         10; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=            1; --  Stream socket
-   SOCK_DGRAM         : constant :=            2; --  Datagram socket
+   SOCK_STREAM         : constant :=          1; --  Stream socket
+   SOCK_DGRAM          : constant :=          2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=           13; --  Permission denied
-   EADDRINUSE         : constant :=           98; --  Address already in use
-   EADDRNOTAVAIL      : constant :=           99; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=           97; --  Addr family not supported
-   EALREADY           : constant :=          114; --  Operation in progress
-   EBADF              : constant :=            9; --  Bad file descriptor
-   ECONNABORTED       : constant :=          103; --  Connection aborted
-   ECONNREFUSED       : constant :=          111; --  Connection refused
-   ECONNRESET         : constant :=          104; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=           89; --  Destination addr required
-   EFAULT             : constant :=           14; --  Bad address
-   EHOSTDOWN          : constant :=          112; --  Host is down
-   EHOSTUNREACH       : constant :=          113; --  No route to host
-   EINPROGRESS        : constant :=          115; --  Operation now in progress
-   EINTR              : constant :=            4; --  Interrupted system call
-   EINVAL             : constant :=           22; --  Invalid argument
-   EIO                : constant :=            5; --  Input output error
-   EISCONN            : constant :=          106; --  Socket already connected
-   ELOOP              : constant :=           40; --  Too many symbolic links
-   EMFILE             : constant :=           24; --  Too many open files
-   EMSGSIZE           : constant :=           90; --  Message too long
-   ENAMETOOLONG       : constant :=           36; --  Name too long
-   ENETDOWN           : constant :=          100; --  Network is down
-   ENETRESET          : constant :=          102; --  Disconn. on network reset
-   ENETUNREACH        : constant :=          101; --  Network is unreachable
-   ENOBUFS            : constant :=          105; --  No buffer space available
-   ENOPROTOOPT        : constant :=           92; --  Protocol not available
-   ENOTCONN           : constant :=          107; --  Socket not connected
-   ENOTSOCK           : constant :=           88; --  Operation on non socket
-   EOPNOTSUPP         : constant :=           95; --  Operation not supported
-   EPFNOSUPPORT       : constant :=           96; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=           93; --  Unknown protocol
-   EPROTOTYPE         : constant :=           91; --  Unknown protocol type
-   ESHUTDOWN          : constant :=          108; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=           94; --  Socket type not supported
-   ETIMEDOUT          : constant :=          110; --  Connection timed out
-   ETOOMANYREFS       : constant :=          109; --  Too many references
-   EWOULDBLOCK        : constant :=           11; --  Operation would block
+   EACCES              : constant :=         13; --  Permission denied
+   EADDRINUSE          : constant :=         98; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         99; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         97; --  Addr family not supported
+   EALREADY            : constant :=        114; --  Operation in progress
+   EBADF               : constant :=          9; --  Bad file descriptor
+   ECONNABORTED        : constant :=        103; --  Connection aborted
+   ECONNREFUSED        : constant :=        111; --  Connection refused
+   ECONNRESET          : constant :=        104; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=         89; --  Destination addr required
+   EFAULT              : constant :=         14; --  Bad address
+   EHOSTDOWN           : constant :=        112; --  Host is down
+   EHOSTUNREACH        : constant :=        113; --  No route to host
+   EINPROGRESS         : constant :=        115; --  Operation now in progress
+   EINTR               : constant :=          4; --  Interrupted system call
+   EINVAL              : constant :=         22; --  Invalid argument
+   EIO                 : constant :=          5; --  Input output error
+   EISCONN             : constant :=        106; --  Socket already connected
+   ELOOP               : constant :=         40; --  Too many symbolic links
+   EMFILE              : constant :=         24; --  Too many open files
+   EMSGSIZE            : constant :=         90; --  Message too long
+   ENAMETOOLONG        : constant :=         36; --  Name too long
+   ENETDOWN            : constant :=        100; --  Network is down
+   ENETRESET           : constant :=        102; --  Disconn. on network reset
+   ENETUNREACH         : constant :=        101; --  Network is unreachable
+   ENOBUFS             : constant :=        105; --  No buffer space available
+   ENOPROTOOPT         : constant :=         92; --  Protocol not available
+   ENOTCONN            : constant :=        107; --  Socket not connected
+   ENOTSOCK            : constant :=         88; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         95; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         96; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         93; --  Unknown protocol
+   EPROTOTYPE          : constant :=         91; --  Unknown protocol type
+   ESHUTDOWN           : constant :=        108; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         94; --  Socket type not supported
+   ETIMEDOUT           : constant :=        110; --  Connection timed out
+   ETOOMANYREFS        : constant :=        109; --  Too many references
+   EWOULDBLOCK         : constant :=         11; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-   TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-   NO_DATA            : constant :=            4; --  No data record for name
-   NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=          1; --  Unknown host
+   TRY_AGAIN           : constant :=          2; --  Host name lookup failure
+   NO_DATA             : constant :=          4; --  No data record for name
+   NO_RECOVERY         : constant :=          3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant :=        21537; --  Set/clear non-blocking io
-   FIONREAD           : constant :=        21531; --  How many bytes to read
+   FIONBIO             : constant :=      21537; --  Set/clear non-blocking io
+   FIONREAD            : constant :=      21531; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=            0; --  No more recv
-   SHUT_WR            : constant :=            1; --  No more send
-   SHUT_RDWR          : constant :=            2; --  No more recv/send
+   SHUT_RD             : constant :=          0; --  No more recv
+   SHUT_WR             : constant :=          1; --  No more send
+   SHUT_RDWR           : constant :=          2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=            1; --  Options for socket level
-   IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=           17; --  UDP
-   IPPROTO_TCP        : constant :=            6; --  TCP
+   SOL_SOCKET          : constant :=          1; --  Options for socket level
+   IPPROTO_IP          : constant :=          0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=         17; --  UDP
+   IPPROTO_TCP         : constant :=          6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=            1; --  Process out-of-band data
-   MSG_PEEK           : constant :=            2; --  Peek at incoming data
-   MSG_EOR            : constant :=          128; --  Send end of record
-   MSG_WAITALL        : constant :=          256; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=        16384; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant := MSG_NOSIGNAL;
+   MSG_OOB             : constant :=          1; --  Process out-of-band data
+   MSG_PEEK            : constant :=          2; --  Peek at incoming data
+   MSG_EOR             : constant :=        128; --  Send end of record
+   MSG_WAITALL         : constant :=        256; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=      16384; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant := MSG_NOSIGNAL;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=            2; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=           -1; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=            9; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=           13; --  Defer close to flush data
-   SO_BROADCAST       : constant :=            6; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=            7; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=            8; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=           21; --  Emission timeout
-   SO_RCVTIMEO        : constant :=           20; --  Reception timeout
-   SO_ERROR           : constant :=            4; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           32; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=           33; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=           34; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=           35; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=           36; --  Leave a multicast group
-   IP_PKTINFO         : constant :=            8; --  Get datagram info
+   TCP_NODELAY         : constant :=          1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=          2; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         -1; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=          9; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         13; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          6; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=          7; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=          8; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=         21; --  Emission timeout
+   SO_RCVTIMEO         : constant :=         20; --  Reception timeout
+   SO_ERROR            : constant :=          4; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=         32; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=         33; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=         34; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=         35; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=         36; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          8; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=   2147483647; --  Maximum writev iovcnt
+   IOV_MAX             : constant := 2147483647; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=            4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=            4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=          4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=          4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=         16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=         28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=        128; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=            1; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=          1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=          0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index ee0fa91..04c75bf 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=          2; --  IPv4 address family
-   AF_INET6           : constant :=         28; --  IPv6 address family
+   AF_INET             : constant :=          2; --  IPv4 address family
+   AF_INET6            : constant :=         28; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=          1; --  Stream socket
-   SOCK_DGRAM         : constant :=          2; --  Datagram socket
+   SOCK_STREAM         : constant :=          1; --  Stream socket
+   SOCK_DGRAM          : constant :=          2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=         13; --  Permission denied
-   EADDRINUSE         : constant :=         98; --  Address already in use
-   EADDRNOTAVAIL      : constant :=         99; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=         97; --  Addr family not supported
-   EALREADY           : constant :=        114; --  Operation in progress
-   EBADF              : constant :=          9; --  Bad file descriptor
-   ECONNABORTED       : constant :=        103; --  Connection aborted
-   ECONNREFUSED       : constant :=        111; --  Connection refused
-   ECONNRESET         : constant :=        104; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=         89; --  Destination addr required
-   EFAULT             : constant :=         14; --  Bad address
-   EHOSTDOWN          : constant :=        112; --  Host is down
-   EHOSTUNREACH       : constant :=        113; --  No route to host
-   EINPROGRESS        : constant :=        115; --  Operation now in progress
-   EINTR              : constant :=          4; --  Interrupted system call
-   EINVAL             : constant :=         22; --  Invalid argument
-   EIO                : constant :=          5; --  Input output error
-   EISCONN            : constant :=        106; --  Socket already connected
-   ELOOP              : constant :=         40; --  Too many symbolic links
-   EMFILE             : constant :=         24; --  Too many open files
-   EMSGSIZE           : constant :=         90; --  Message too long
-   ENAMETOOLONG       : constant :=         36; --  Name too long
-   ENETDOWN           : constant :=        100; --  Network is down
-   ENETRESET          : constant :=        102; --  Disconn. on network reset
-   ENETUNREACH        : constant :=        101; --  Network is unreachable
-   ENOBUFS            : constant :=        105; --  No buffer space available
-   ENOPROTOOPT        : constant :=         92; --  Protocol not available
-   ENOTCONN           : constant :=        107; --  Socket not connected
-   ENOTSOCK           : constant :=         88; --  Operation on non socket
-   EOPNOTSUPP         : constant :=         95; --  Operation not supported
-   EPFNOSUPPORT       : constant :=         96; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=         93; --  Unknown protocol
-   EPROTOTYPE         : constant :=         91; --  Unknown protocol type
-   ESHUTDOWN          : constant :=        108; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=         94; --  Socket type not supported
-   ETIMEDOUT          : constant :=        110; --  Connection timed out
-   ETOOMANYREFS       : constant :=        109; --  Too many references
-   EWOULDBLOCK        : constant :=         11; --  Operation would block
+   EACCES              : constant :=         13; --  Permission denied
+   EADDRINUSE          : constant :=         98; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         99; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         97; --  Addr family not supported
+   EALREADY            : constant :=        114; --  Operation in progress
+   EBADF               : constant :=          9; --  Bad file descriptor
+   ECONNABORTED        : constant :=        103; --  Connection aborted
+   ECONNREFUSED        : constant :=        111; --  Connection refused
+   ECONNRESET          : constant :=        104; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=         89; --  Destination addr required
+   EFAULT              : constant :=         14; --  Bad address
+   EHOSTDOWN           : constant :=        112; --  Host is down
+   EHOSTUNREACH        : constant :=        113; --  No route to host
+   EINPROGRESS         : constant :=        115; --  Operation now in progress
+   EINTR               : constant :=          4; --  Interrupted system call
+   EINVAL              : constant :=         22; --  Invalid argument
+   EIO                 : constant :=          5; --  Input output error
+   EISCONN             : constant :=        106; --  Socket already connected
+   ELOOP               : constant :=         40; --  Too many symbolic links
+   EMFILE              : constant :=         24; --  Too many open files
+   EMSGSIZE            : constant :=         90; --  Message too long
+   ENAMETOOLONG        : constant :=         36; --  Name too long
+   ENETDOWN            : constant :=        100; --  Network is down
+   ENETRESET           : constant :=        102; --  Disconn. on network reset
+   ENETUNREACH         : constant :=        101; --  Network is unreachable
+   ENOBUFS             : constant :=        105; --  No buffer space available
+   ENOPROTOOPT         : constant :=         92; --  Protocol not available
+   ENOTCONN            : constant :=        107; --  Socket not connected
+   ENOTSOCK            : constant :=         88; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         95; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         96; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         93; --  Unknown protocol
+   EPROTOTYPE          : constant :=         91; --  Unknown protocol type
+   ESHUTDOWN           : constant :=        108; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         94; --  Socket type not supported
+   ETIMEDOUT           : constant :=        110; --  Connection timed out
+   ETOOMANYREFS        : constant :=        109; --  Too many references
+   EWOULDBLOCK         : constant :=         11; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=          1; --  Unknown host
-   TRY_AGAIN          : constant :=          2; --  Host name lookup failure
-   NO_DATA            : constant :=          4; --  No data record for name
-   NO_RECOVERY        : constant :=          3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=          1; --  Unknown host
+   TRY_AGAIN           : constant :=          2; --  Host name lookup failure
+   NO_DATA             : constant :=          4; --  No data record for name
+   NO_RECOVERY         : constant :=          3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant :=      21537; --  Set/clear non-blocking io
-   FIONREAD           : constant :=      21531; --  How many bytes to read
+   FIONBIO             : constant :=      21537; --  Set/clear non-blocking io
+   FIONREAD            : constant :=      21531; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=          0; --  No more recv
-   SHUT_WR            : constant :=          1; --  No more send
-   SHUT_RDWR          : constant :=          2; --  No more recv/send
+   SHUT_RD             : constant :=          0; --  No more recv
+   SHUT_WR             : constant :=          1; --  No more send
+   SHUT_RDWR           : constant :=          2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=      65535; --  Options for socket level
-   IPPROTO_IP         : constant :=          0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=         17; --  UDP
-   IPPROTO_TCP        : constant :=          6; --  TCP
+   SOL_SOCKET          : constant :=      65535; --  Options for socket level
+   IPPROTO_IP          : constant :=          0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=         17; --  UDP
+   IPPROTO_TCP         : constant :=          6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=          1; --  Process out-of-band data
-   MSG_PEEK           : constant :=          2; --  Peek at incoming data
-   MSG_EOR            : constant :=        128; --  Send end of record
-   MSG_WAITALL        : constant :=        256; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=         -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=          0;
+   MSG_OOB             : constant :=          1; --  Process out-of-band data
+   MSG_PEEK            : constant :=          2; --  Peek at incoming data
+   MSG_EOR             : constant :=        128; --  Send end of record
+   MSG_WAITALL         : constant :=        256; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=         -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=          0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=          1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=          4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=        512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=          8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=        128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=         32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=       4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=       4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=       4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=       4102; --  Reception timeout
-   SO_ERROR           : constant :=       4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=          9; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=         10; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=         11; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=         12; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=         13; --  Leave a multicast group
-   IP_PKTINFO         : constant :=         -1; --  Get datagram info
+   TCP_NODELAY         : constant :=          1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=          4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=        512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=          8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=        128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=         32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=       4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=       4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=       4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=       4102; --  Reception timeout
+   SO_ERROR            : constant :=       4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=          9; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=         10; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=         11; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=         12; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=         13; --  Leave a multicast group
+   IP_PKTINFO          : constant :=         -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant := 2147483647; --  Maximum writev iovcnt
+   IOV_MAX             : constant := 2147483647; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=          4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=          4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=          4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=          4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=         16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=         28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=        512; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=          1; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=          1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=          0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index 1266a4b..3bb83e4 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          23; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          23; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           1; --  Stream socket
-   SOCK_DGRAM         : constant :=           2; --  Datagram socket
+   SOCK_STREAM         : constant :=           1; --  Stream socket
+   SOCK_DGRAM          : constant :=           2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=       10013; --  Permission denied
-   EADDRINUSE         : constant :=       10048; --  Address already in use
-   EADDRNOTAVAIL      : constant :=       10049; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=       10047; --  Addr family not supported
-   EALREADY           : constant :=       10037; --  Operation in progress
-   EBADF              : constant :=       10009; --  Bad file descriptor
-   ECONNABORTED       : constant :=       10053; --  Connection aborted
-   ECONNREFUSED       : constant :=       10061; --  Connection refused
-   ECONNRESET         : constant :=       10054; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=       10039; --  Destination addr required
-   EFAULT             : constant :=       10014; --  Bad address
-   EHOSTDOWN          : constant :=       10064; --  Host is down
-   EHOSTUNREACH       : constant :=       10065; --  No route to host
-   EINPROGRESS        : constant :=       10036; --  Operation now in progress
-   EINTR              : constant :=       10004; --  Interrupted system call
-   EINVAL             : constant :=       10022; --  Invalid argument
-   EIO                : constant :=       10101; --  Input output error
-   EISCONN            : constant :=       10056; --  Socket already connected
-   ELOOP              : constant :=       10062; --  Too many symbolic links
-   EMFILE             : constant :=       10024; --  Too many open files
-   EMSGSIZE           : constant :=       10040; --  Message too long
-   ENAMETOOLONG       : constant :=       10063; --  Name too long
-   ENETDOWN           : constant :=       10050; --  Network is down
-   ENETRESET          : constant :=       10052; --  Disconn. on network reset
-   ENETUNREACH        : constant :=       10051; --  Network is unreachable
-   ENOBUFS            : constant :=       10055; --  No buffer space available
-   ENOPROTOOPT        : constant :=       10042; --  Protocol not available
-   ENOTCONN           : constant :=       10057; --  Socket not connected
-   ENOTSOCK           : constant :=       10038; --  Operation on non socket
-   EOPNOTSUPP         : constant :=       10045; --  Operation not supported
-   EPFNOSUPPORT       : constant :=       10046; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=       10043; --  Unknown protocol
-   EPROTOTYPE         : constant :=       10041; --  Unknown protocol type
-   ESHUTDOWN          : constant :=       10058; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=       10044; --  Socket type not supported
-   ETIMEDOUT          : constant :=       10060; --  Connection timed out
-   ETOOMANYREFS       : constant :=       10059; --  Too many references
-   EWOULDBLOCK        : constant :=       10035; --  Operation would block
+   EACCES              : constant :=       10013; --  Permission denied
+   EADDRINUSE          : constant :=       10048; --  Address already in use
+   EADDRNOTAVAIL       : constant :=       10049; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=       10047; --  Addr family not supported
+   EALREADY            : constant :=       10037; --  Operation in progress
+   EBADF               : constant :=       10009; --  Bad file descriptor
+   ECONNABORTED        : constant :=       10053; --  Connection aborted
+   ECONNREFUSED        : constant :=       10061; --  Connection refused
+   ECONNRESET          : constant :=       10054; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=       10039; --  Destination addr required
+   EFAULT              : constant :=       10014; --  Bad address
+   EHOSTDOWN           : constant :=       10064; --  Host is down
+   EHOSTUNREACH        : constant :=       10065; --  No route to host
+   EINPROGRESS         : constant :=       10036; --  Operation now in progress
+   EINTR               : constant :=       10004; --  Interrupted system call
+   EINVAL              : constant :=       10022; --  Invalid argument
+   EIO                 : constant :=       10101; --  Input output error
+   EISCONN             : constant :=       10056; --  Socket already connected
+   ELOOP               : constant :=       10062; --  Too many symbolic links
+   EMFILE              : constant :=       10024; --  Too many open files
+   EMSGSIZE            : constant :=       10040; --  Message too long
+   ENAMETOOLONG        : constant :=       10063; --  Name too long
+   ENETDOWN            : constant :=       10050; --  Network is down
+   ENETRESET           : constant :=       10052; --  Disconn. on network reset
+   ENETUNREACH         : constant :=       10051; --  Network is unreachable
+   ENOBUFS             : constant :=       10055; --  No buffer space available
+   ENOPROTOOPT         : constant :=       10042; --  Protocol not available
+   ENOTCONN            : constant :=       10057; --  Socket not connected
+   ENOTSOCK            : constant :=       10038; --  Operation on non socket
+   EOPNOTSUPP          : constant :=       10045; --  Operation not supported
+   EPFNOSUPPORT        : constant :=       10046; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=       10043; --  Unknown protocol
+   EPROTOTYPE          : constant :=       10041; --  Unknown protocol type
+   ESHUTDOWN           : constant :=       10058; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=       10044; --  Socket type not supported
+   ETIMEDOUT           : constant :=       10060; --  Connection timed out
+   ETOOMANYREFS        : constant :=       10059; --  Too many references
+   EWOULDBLOCK         : constant :=       10035; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=       11001; --  Unknown host
-   TRY_AGAIN          : constant :=       11002; --  Host name lookup failure
-   NO_DATA            : constant :=       11004; --  No data record for name
-   NO_RECOVERY        : constant :=       11003; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=       11001; --  Unknown host
+   TRY_AGAIN           : constant :=       11002; --  Host name lookup failure
+   NO_DATA             : constant :=       11004; --  No data record for name
+   NO_RECOVERY         : constant :=       11003; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=          -1; --  Send end of record
-   MSG_WAITALL        : constant :=          -1; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=          -1; --  Send end of record
+   MSG_WAITALL         : constant :=          -1; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=          -1; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           9; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=          10; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=          11; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=          12; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=          13; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          19; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=          -1; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=           9; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          10; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          11; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          12; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          13; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          19; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=  2147483647; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=  2147483647; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,14 +178,32 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=        4100; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.short;
+   subtype H_Length_T   is Interfaces.C.short;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           0; --  Need buffer for Netdb ops
+   Need_Netdb_Buffer   : constant :=           0; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
+
+   Thread_Blocking_IO : constant Boolean := True;
+   --  Set False for contexts where socket i/o are process blocking
 
    ------------------------------
    -- MinGW-specific constants --
@@ -193,16 +212,9 @@ package GNAT.Sockets.Constants is
    --  These constants may be used only within the MinGW version of
    --  GNAT.Sockets.Thin.
 
-   WSASYSNOTREADY     : constant :=       10091; --  System not ready
-   WSAVERNOTSUPPORTED : constant :=       10092; --  Version not supported
-   WSANOTINITIALISED  : constant :=       10093; --  Winsock not initialized
-   WSAEDISCON         : constant :=       10101; --  Disconnected
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
-
-   Thread_Blocking_IO : constant Boolean := True;
-   --  Set False for contexts where socket i/o are process blocking
+   WSASYSNOTREADY      : constant :=       10091; --  System not ready
+   WSAVERNOTSUPPORTED  : constant :=       10092; --  Version not supported
+   WSANOTINITIALISED   : constant :=       10093; --  Winsock not initialized
+   WSAEDISCON          : constant :=       10101; --  Disconnected
 
 end GNAT.Sockets.Constants;
index 7cd8c8b..2d5f2d9 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  by the GNAT.Sockets package (g-socket.ads). This package should not be
 --  directly with'ed by an applications program.
 
---  This is the version for sparc64-sun-solaris2.8
+--  This is the version for sparc-sun-solaris2.8
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          26; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          26; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           2; --  Stream socket
-   SOCK_DGRAM         : constant :=           1; --  Datagram socket
+   SOCK_STREAM         : constant :=           2; --  Stream socket
+   SOCK_DGRAM          : constant :=           1; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=         125; --  Address already in use
-   EADDRNOTAVAIL      : constant :=         126; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=         124; --  Addr family not supported
-   EALREADY           : constant :=         149; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=         130; --  Connection aborted
-   ECONNREFUSED       : constant :=         146; --  Connection refused
-   ECONNRESET         : constant :=         131; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=          96; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=         147; --  Host is down
-   EHOSTUNREACH       : constant :=         148; --  No route to host
-   EINPROGRESS        : constant :=         150; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=         133; --  Socket already connected
-   ELOOP              : constant :=          90; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=          97; --  Message too long
-   ENAMETOOLONG       : constant :=          78; --  Name too long
-   ENETDOWN           : constant :=         127; --  Network is down
-   ENETRESET          : constant :=         129; --  Disconn. on network reset
-   ENETUNREACH        : constant :=         128; --  Network is unreachable
-   ENOBUFS            : constant :=         132; --  No buffer space available
-   ENOPROTOOPT        : constant :=          99; --  Protocol not available
-   ENOTCONN           : constant :=         134; --  Socket not connected
-   ENOTSOCK           : constant :=          95; --  Operation on non socket
-   EOPNOTSUPP         : constant :=         122; --  Operation not supported
-   EPFNOSUPPORT       : constant :=         123; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=         120; --  Unknown protocol
-   EPROTOTYPE         : constant :=          98; --  Unknown protocol type
-   ESHUTDOWN          : constant :=         143; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=         121; --  Socket type not supported
-   ETIMEDOUT          : constant :=         145; --  Connection timed out
-   ETOOMANYREFS       : constant :=         144; --  Too many references
-   EWOULDBLOCK        : constant :=          11; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=         125; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         126; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         124; --  Addr family not supported
+   EALREADY            : constant :=         149; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=         130; --  Connection aborted
+   ECONNREFUSED        : constant :=         146; --  Connection refused
+   ECONNRESET          : constant :=         131; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=          96; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=         147; --  Host is down
+   EHOSTUNREACH        : constant :=         148; --  No route to host
+   EINPROGRESS         : constant :=         150; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=         133; --  Socket already connected
+   ELOOP               : constant :=          90; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=          97; --  Message too long
+   ENAMETOOLONG        : constant :=          78; --  Name too long
+   ENETDOWN            : constant :=         127; --  Network is down
+   ENETRESET           : constant :=         129; --  Disconn. on network reset
+   ENETUNREACH         : constant :=         128; --  Network is unreachable
+   ENOBUFS             : constant :=         132; --  No buffer space available
+   ENOPROTOOPT         : constant :=          99; --  Protocol not available
+   ENOTCONN            : constant :=         134; --  Socket not connected
+   ENOTSOCK            : constant :=          95; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         122; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         123; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         120; --  Unknown protocol
+   EPROTOTYPE          : constant :=          98; --  Unknown protocol type
+   ESHUTDOWN           : constant :=         143; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         121; --  Socket type not supported
+   ETIMEDOUT           : constant :=         145; --  Connection timed out
+   ETOOMANYREFS        : constant :=         144; --  Too many references
+   EWOULDBLOCK         : constant :=          11; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=          64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=          64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=          -1; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=          16; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=          17; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=          18; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=          19; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=          20; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=          -1; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=          16; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          17; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          18; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          19; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          20; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=          16; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=          16; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           8; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           8; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          32; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         128; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           1; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index cd0aebd..2d5f2d9 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          26; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          26; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           2; --  Stream socket
-   SOCK_DGRAM         : constant :=           1; --  Datagram socket
+   SOCK_STREAM         : constant :=           2; --  Stream socket
+   SOCK_DGRAM          : constant :=           1; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=         125; --  Address already in use
-   EADDRNOTAVAIL      : constant :=         126; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=         124; --  Addr family not supported
-   EALREADY           : constant :=         149; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=         130; --  Connection aborted
-   ECONNREFUSED       : constant :=         146; --  Connection refused
-   ECONNRESET         : constant :=         131; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=          96; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=         147; --  Host is down
-   EHOSTUNREACH       : constant :=         148; --  No route to host
-   EINPROGRESS        : constant :=         150; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=         133; --  Socket already connected
-   ELOOP              : constant :=          90; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=          97; --  Message too long
-   ENAMETOOLONG       : constant :=          78; --  Name too long
-   ENETDOWN           : constant :=         127; --  Network is down
-   ENETRESET          : constant :=         129; --  Disconn. on network reset
-   ENETUNREACH        : constant :=         128; --  Network is unreachable
-   ENOBUFS            : constant :=         132; --  No buffer space available
-   ENOPROTOOPT        : constant :=          99; --  Protocol not available
-   ENOTCONN           : constant :=         134; --  Socket not connected
-   ENOTSOCK           : constant :=          95; --  Operation on non socket
-   EOPNOTSUPP         : constant :=         122; --  Operation not supported
-   EPFNOSUPPORT       : constant :=         123; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=         120; --  Unknown protocol
-   EPROTOTYPE         : constant :=          98; --  Unknown protocol type
-   ESHUTDOWN          : constant :=         143; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=         121; --  Socket type not supported
-   ETIMEDOUT          : constant :=         145; --  Connection timed out
-   ETOOMANYREFS       : constant :=         144; --  Too many references
-   EWOULDBLOCK        : constant :=          11; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=         125; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         126; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         124; --  Addr family not supported
+   EALREADY            : constant :=         149; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=         130; --  Connection aborted
+   ECONNREFUSED        : constant :=         146; --  Connection refused
+   ECONNRESET          : constant :=         131; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=          96; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=         147; --  Host is down
+   EHOSTUNREACH        : constant :=         148; --  No route to host
+   EINPROGRESS         : constant :=         150; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=         133; --  Socket already connected
+   ELOOP               : constant :=          90; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=          97; --  Message too long
+   ENAMETOOLONG        : constant :=          78; --  Name too long
+   ENETDOWN            : constant :=         127; --  Network is down
+   ENETRESET           : constant :=         129; --  Disconn. on network reset
+   ENETUNREACH         : constant :=         128; --  Network is unreachable
+   ENOBUFS             : constant :=         132; --  No buffer space available
+   ENOPROTOOPT         : constant :=          99; --  Protocol not available
+   ENOTCONN            : constant :=         134; --  Socket not connected
+   ENOTSOCK            : constant :=          95; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         122; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         123; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         120; --  Unknown protocol
+   EPROTOTYPE          : constant :=          98; --  Unknown protocol type
+   ESHUTDOWN           : constant :=         143; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         121; --  Socket type not supported
+   ETIMEDOUT           : constant :=         145; --  Connection timed out
+   ETOOMANYREFS        : constant :=         144; --  Too many references
+   EWOULDBLOCK         : constant :=          11; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=          64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=          64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=          -1; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=          16; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=          17; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=          18; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=          19; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=          20; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=          -1; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=          16; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          17; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          18; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          19; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          20; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=          16; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=          16; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          32; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         128; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           1; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index 959625e..a14e610 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          26; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          26; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           1; --  Stream socket
-   SOCK_DGRAM         : constant :=           2; --  Datagram socket
+   SOCK_STREAM         : constant :=           1; --  Stream socket
+   SOCK_DGRAM          : constant :=           2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=          48; --  Address already in use
-   EADDRNOTAVAIL      : constant :=          49; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=          47; --  Addr family not supported
-   EALREADY           : constant :=          37; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=          53; --  Connection aborted
-   ECONNREFUSED       : constant :=          61; --  Connection refused
-   ECONNRESET         : constant :=          54; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=          39; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=          64; --  Host is down
-   EHOSTUNREACH       : constant :=          65; --  No route to host
-   EINPROGRESS        : constant :=          36; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=          56; --  Socket already connected
-   ELOOP              : constant :=          62; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=          40; --  Message too long
-   ENAMETOOLONG       : constant :=          63; --  Name too long
-   ENETDOWN           : constant :=          50; --  Network is down
-   ENETRESET          : constant :=          52; --  Disconn. on network reset
-   ENETUNREACH        : constant :=          51; --  Network is unreachable
-   ENOBUFS            : constant :=          55; --  No buffer space available
-   ENOPROTOOPT        : constant :=          42; --  Protocol not available
-   ENOTCONN           : constant :=          57; --  Socket not connected
-   ENOTSOCK           : constant :=          38; --  Operation on non socket
-   EOPNOTSUPP         : constant :=          45; --  Operation not supported
-   EPFNOSUPPORT       : constant :=          46; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=          43; --  Unknown protocol
-   EPROTOTYPE         : constant :=          41; --  Unknown protocol type
-   ESHUTDOWN          : constant :=          58; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=          44; --  Socket type not supported
-   ETIMEDOUT          : constant :=          60; --  Connection timed out
-   ETOOMANYREFS       : constant :=          59; --  Too many references
-   EWOULDBLOCK        : constant :=          35; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=          48; --  Address already in use
+   EADDRNOTAVAIL       : constant :=          49; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=          47; --  Addr family not supported
+   EALREADY            : constant :=          37; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=          53; --  Connection aborted
+   ECONNREFUSED        : constant :=          61; --  Connection refused
+   ECONNRESET          : constant :=          54; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=          39; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=          64; --  Host is down
+   EHOSTUNREACH        : constant :=          65; --  No route to host
+   EINPROGRESS         : constant :=          36; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=          56; --  Socket already connected
+   ELOOP               : constant :=          62; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=          40; --  Message too long
+   ENAMETOOLONG        : constant :=          63; --  Name too long
+   ENETDOWN            : constant :=          50; --  Network is down
+   ENETRESET           : constant :=          52; --  Disconn. on network reset
+   ENETUNREACH         : constant :=          51; --  Network is unreachable
+   ENOBUFS             : constant :=          55; --  No buffer space available
+   ENOPROTOOPT         : constant :=          42; --  Protocol not available
+   ENOTCONN            : constant :=          57; --  Socket not connected
+   ENOTSOCK            : constant :=          38; --  Operation on non socket
+   EOPNOTSUPP          : constant :=          45; --  Operation not supported
+   EPFNOSUPPORT        : constant :=          46; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=          43; --  Unknown protocol
+   EPROTOTYPE          : constant :=          41; --  Unknown protocol type
+   ESHUTDOWN           : constant :=          58; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=          44; --  Socket type not supported
+   ETIMEDOUT           : constant :=          60; --  Connection timed out
+   ETOOMANYREFS        : constant :=          59; --  Too many references
+   EWOULDBLOCK         : constant :=          35; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=          64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=          64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=         512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           9; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=          10; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=          11; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=          12; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=          13; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=           9; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          10; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          11; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          12; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          13; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=        1024; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=        1024; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          32; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         512; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           0; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           0; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index 8634a0a..072ee49 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=           2; --  IPv4 address family
-   AF_INET6           : constant :=          26; --  IPv6 address family
+   AF_INET             : constant :=           2; --  IPv4 address family
+   AF_INET6            : constant :=          26; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=           1; --  Stream socket
-   SOCK_DGRAM         : constant :=           2; --  Datagram socket
+   SOCK_STREAM         : constant :=           1; --  Stream socket
+   SOCK_DGRAM          : constant :=           2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=          13; --  Permission denied
-   EADDRINUSE         : constant :=          48; --  Address already in use
-   EADDRNOTAVAIL      : constant :=          49; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=          47; --  Addr family not supported
-   EALREADY           : constant :=          37; --  Operation in progress
-   EBADF              : constant :=           9; --  Bad file descriptor
-   ECONNABORTED       : constant :=          53; --  Connection aborted
-   ECONNREFUSED       : constant :=          61; --  Connection refused
-   ECONNRESET         : constant :=          54; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=          39; --  Destination addr required
-   EFAULT             : constant :=          14; --  Bad address
-   EHOSTDOWN          : constant :=          64; --  Host is down
-   EHOSTUNREACH       : constant :=          65; --  No route to host
-   EINPROGRESS        : constant :=          36; --  Operation now in progress
-   EINTR              : constant :=           4; --  Interrupted system call
-   EINVAL             : constant :=          22; --  Invalid argument
-   EIO                : constant :=           5; --  Input output error
-   EISCONN            : constant :=          56; --  Socket already connected
-   ELOOP              : constant :=          62; --  Too many symbolic links
-   EMFILE             : constant :=          24; --  Too many open files
-   EMSGSIZE           : constant :=          40; --  Message too long
-   ENAMETOOLONG       : constant :=          63; --  Name too long
-   ENETDOWN           : constant :=          50; --  Network is down
-   ENETRESET          : constant :=          52; --  Disconn. on network reset
-   ENETUNREACH        : constant :=          51; --  Network is unreachable
-   ENOBUFS            : constant :=          55; --  No buffer space available
-   ENOPROTOOPT        : constant :=          42; --  Protocol not available
-   ENOTCONN           : constant :=          57; --  Socket not connected
-   ENOTSOCK           : constant :=          38; --  Operation on non socket
-   EOPNOTSUPP         : constant :=          45; --  Operation not supported
-   EPFNOSUPPORT       : constant :=          46; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=          43; --  Unknown protocol
-   EPROTOTYPE         : constant :=          41; --  Unknown protocol type
-   ESHUTDOWN          : constant :=          58; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=          44; --  Socket type not supported
-   ETIMEDOUT          : constant :=          60; --  Connection timed out
-   ETOOMANYREFS       : constant :=          59; --  Too many references
-   EWOULDBLOCK        : constant :=          35; --  Operation would block
+   EACCES              : constant :=          13; --  Permission denied
+   EADDRINUSE          : constant :=          48; --  Address already in use
+   EADDRNOTAVAIL       : constant :=          49; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=          47; --  Addr family not supported
+   EALREADY            : constant :=          37; --  Operation in progress
+   EBADF               : constant :=           9; --  Bad file descriptor
+   ECONNABORTED        : constant :=          53; --  Connection aborted
+   ECONNREFUSED        : constant :=          61; --  Connection refused
+   ECONNRESET          : constant :=          54; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=          39; --  Destination addr required
+   EFAULT              : constant :=          14; --  Bad address
+   EHOSTDOWN           : constant :=          64; --  Host is down
+   EHOSTUNREACH        : constant :=          65; --  No route to host
+   EINPROGRESS         : constant :=          36; --  Operation now in progress
+   EINTR               : constant :=           4; --  Interrupted system call
+   EINVAL              : constant :=          22; --  Invalid argument
+   EIO                 : constant :=           5; --  Input output error
+   EISCONN             : constant :=          56; --  Socket already connected
+   ELOOP               : constant :=          62; --  Too many symbolic links
+   EMFILE              : constant :=          24; --  Too many open files
+   EMSGSIZE            : constant :=          40; --  Message too long
+   ENAMETOOLONG        : constant :=          63; --  Name too long
+   ENETDOWN            : constant :=          50; --  Network is down
+   ENETRESET           : constant :=          52; --  Disconn. on network reset
+   ENETUNREACH         : constant :=          51; --  Network is unreachable
+   ENOBUFS             : constant :=          55; --  No buffer space available
+   ENOPROTOOPT         : constant :=          42; --  Protocol not available
+   ENOTCONN            : constant :=          57; --  Socket not connected
+   ENOTSOCK            : constant :=          38; --  Operation on non socket
+   EOPNOTSUPP          : constant :=          45; --  Operation not supported
+   EPFNOSUPPORT        : constant :=          46; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=          43; --  Unknown protocol
+   EPROTOTYPE          : constant :=          41; --  Unknown protocol type
+   ESHUTDOWN           : constant :=          58; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=          44; --  Socket type not supported
+   ETIMEDOUT           : constant :=          60; --  Connection timed out
+   ETOOMANYREFS        : constant :=          59; --  Too many references
+   EWOULDBLOCK         : constant :=          35; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=           1; --  Unknown host
-   TRY_AGAIN          : constant :=           2; --  Host name lookup failure
-   NO_DATA            : constant :=           4; --  No data record for name
-   NO_RECOVERY        : constant :=           3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=           1; --  Unknown host
+   TRY_AGAIN           : constant :=           2; --  Host name lookup failure
+   NO_DATA             : constant :=           4; --  No data record for name
+   NO_RECOVERY         : constant :=           3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant := -2147195266; --  Set/clear non-blocking io
-   FIONREAD           : constant :=  1074030207; --  How many bytes to read
+   FIONBIO             : constant := -2147195266; --  Set/clear non-blocking io
+   FIONREAD            : constant :=  1074030207; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=           0; --  No more recv
-   SHUT_WR            : constant :=           1; --  No more send
-   SHUT_RDWR          : constant :=           2; --  No more recv/send
+   SHUT_RD             : constant :=           0; --  No more recv
+   SHUT_WR             : constant :=           1; --  No more send
+   SHUT_RDWR           : constant :=           2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=       65535; --  Options for socket level
-   IPPROTO_IP         : constant :=           0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=          17; --  UDP
-   IPPROTO_TCP        : constant :=           6; --  TCP
+   SOL_SOCKET          : constant :=       65535; --  Options for socket level
+   IPPROTO_IP          : constant :=           0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=          17; --  UDP
+   IPPROTO_TCP         : constant :=           6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=           1; --  Process out-of-band data
-   MSG_PEEK           : constant :=           2; --  Peek at incoming data
-   MSG_EOR            : constant :=           8; --  Send end of record
-   MSG_WAITALL        : constant :=         128; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=          -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=           0;
+   MSG_OOB             : constant :=           1; --  Process out-of-band data
+   MSG_PEEK            : constant :=           2; --  Peek at incoming data
+   MSG_EOR             : constant :=           8; --  Send end of record
+   MSG_WAITALL         : constant :=         128; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=          -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=           0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=           1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=           4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=         512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=           8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=         128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=          32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=        4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=        4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=        4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=        4102; --  Reception timeout
-   SO_ERROR           : constant :=        4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           9; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=          10; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=          11; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=          12; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=          13; --  Leave a multicast group
-   IP_PKTINFO         : constant :=          -1; --  Get datagram info
+   TCP_NODELAY         : constant :=           1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=           4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=           8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=        4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=        4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=        4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=        4102; --  Reception timeout
+   SO_ERROR            : constant :=        4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=           9; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=          10; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=          11; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=          12; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=          13; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=        1024; --  Maximum writev iovcnt
+   IOV_MAX             : constant :=        1024; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,18 +178,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=           4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=           4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=           4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=           4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=          16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=          28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=         512; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=           1; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=           1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=           0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index 16cf1fe..8af1743 100644 (file)
 --  by the GNAT.Sockets package (g-socket.ads). This package should not be
 --  directly with'ed by an applications program.
 
---  This is the version for powerpc-wrs-vxworks
+--  This is the version for VxWorks
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=          2; --  IPv4 address family
-   AF_INET6           : constant :=         -1; --  IPv6 address family
+   AF_INET             : constant :=          2; --  IPv4 address family
+   AF_INET6            : constant :=         28; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=          1; --  Stream socket
-   SOCK_DGRAM         : constant :=          2; --  Datagram socket
+   SOCK_STREAM         : constant :=          1; --  Stream socket
+   SOCK_DGRAM          : constant :=          2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=         13; --  Permission denied
-   EADDRINUSE         : constant :=         48; --  Address already in use
-   EADDRNOTAVAIL      : constant :=         49; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=         47; --  Addr family not supported
-   EALREADY           : constant :=         69; --  Operation in progress
-   EBADF              : constant :=          9; --  Bad file descriptor
-   ECONNABORTED       : constant :=         53; --  Connection aborted
-   ECONNREFUSED       : constant :=         61; --  Connection refused
-   ECONNRESET         : constant :=         54; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=         40; --  Destination addr required
-   EFAULT             : constant :=         14; --  Bad address
-   EHOSTDOWN          : constant :=         67; --  Host is down
-   EHOSTUNREACH       : constant :=         65; --  No route to host
-   EINPROGRESS        : constant :=         68; --  Operation now in progress
-   EINTR              : constant :=          4; --  Interrupted system call
-   EINVAL             : constant :=         22; --  Invalid argument
-   EIO                : constant :=          5; --  Input output error
-   EISCONN            : constant :=         56; --  Socket already connected
-   ELOOP              : constant :=         64; --  Too many symbolic links
-   EMFILE             : constant :=         24; --  Too many open files
-   EMSGSIZE           : constant :=         36; --  Message too long
-   ENAMETOOLONG       : constant :=         26; --  Name too long
-   ENETDOWN           : constant :=         62; --  Network is down
-   ENETRESET          : constant :=         52; --  Disconn. on network reset
-   ENETUNREACH        : constant :=         51; --  Network is unreachable
-   ENOBUFS            : constant :=         55; --  No buffer space available
-   ENOPROTOOPT        : constant :=         42; --  Protocol not available
-   ENOTCONN           : constant :=         57; --  Socket not connected
-   ENOTSOCK           : constant :=         50; --  Operation on non socket
-   EOPNOTSUPP         : constant :=         45; --  Operation not supported
-   EPFNOSUPPORT       : constant :=         46; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=         43; --  Unknown protocol
-   EPROTOTYPE         : constant :=         41; --  Unknown protocol type
-   ESHUTDOWN          : constant :=         58; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=         44; --  Socket type not supported
-   ETIMEDOUT          : constant :=         60; --  Connection timed out
-   ETOOMANYREFS       : constant :=         59; --  Too many references
-   EWOULDBLOCK        : constant :=         70; --  Operation would block
+   EACCES              : constant :=         13; --  Permission denied
+   EADDRINUSE          : constant :=         48; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         49; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         47; --  Addr family not supported
+   EALREADY            : constant :=         69; --  Operation in progress
+   EBADF               : constant :=          9; --  Bad file descriptor
+   ECONNABORTED        : constant :=         53; --  Connection aborted
+   ECONNREFUSED        : constant :=         61; --  Connection refused
+   ECONNRESET          : constant :=         54; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=         40; --  Destination addr required
+   EFAULT              : constant :=         14; --  Bad address
+   EHOSTDOWN           : constant :=         67; --  Host is down
+   EHOSTUNREACH        : constant :=         65; --  No route to host
+   EINPROGRESS         : constant :=         68; --  Operation now in progress
+   EINTR               : constant :=          4; --  Interrupted system call
+   EINVAL              : constant :=         22; --  Invalid argument
+   EIO                 : constant :=          5; --  Input output error
+   EISCONN             : constant :=         56; --  Socket already connected
+   ELOOP               : constant :=         64; --  Too many symbolic links
+   EMFILE              : constant :=         24; --  Too many open files
+   EMSGSIZE            : constant :=         36; --  Message too long
+   ENAMETOOLONG        : constant :=         26; --  Name too long
+   ENETDOWN            : constant :=         62; --  Network is down
+   ENETRESET           : constant :=         52; --  Disconn. on network reset
+   ENETUNREACH         : constant :=         51; --  Network is unreachable
+   ENOBUFS             : constant :=         55; --  No buffer space available
+   ENOPROTOOPT         : constant :=         42; --  Protocol not available
+   ENOTCONN            : constant :=         57; --  Socket not connected
+   ENOTSOCK            : constant :=         50; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         45; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         46; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         43; --  Unknown protocol
+   EPROTOTYPE          : constant :=         41; --  Unknown protocol type
+   ESHUTDOWN           : constant :=         58; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         44; --  Socket type not supported
+   ETIMEDOUT           : constant :=         60; --  Connection timed out
+   ETOOMANYREFS        : constant :=         59; --  Too many references
+   EWOULDBLOCK         : constant :=         70; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=          1; --  Unknown host
-   TRY_AGAIN          : constant :=          2; --  Host name lookup failure
-   NO_DATA            : constant :=          4; --  No data record for name
-   NO_RECOVERY        : constant :=          3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=          1; --  Unknown host
+   TRY_AGAIN           : constant :=          2; --  Host name lookup failure
+   NO_DATA             : constant :=          4; --  No data record for name
+   NO_RECOVERY         : constant :=          3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant :=         16; --  Set/clear non-blocking io
-   FIONREAD           : constant :=          1; --  How many bytes to read
+   FIONBIO             : constant :=         16; --  Set/clear non-blocking io
+   FIONREAD            : constant :=          1; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=          0; --  No more recv
-   SHUT_WR            : constant :=          1; --  No more send
-   SHUT_RDWR          : constant :=          2; --  No more recv/send
+   SHUT_RD             : constant :=          0; --  No more recv
+   SHUT_WR             : constant :=          1; --  No more send
+   SHUT_RDWR           : constant :=          2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=      65535; --  Options for socket level
-   IPPROTO_IP         : constant :=          0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=         17; --  UDP
-   IPPROTO_TCP        : constant :=          6; --  TCP
+   SOL_SOCKET          : constant :=      65535; --  Options for socket level
+   IPPROTO_IP          : constant :=          0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=         17; --  UDP
+   IPPROTO_TCP         : constant :=          6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=          1; --  Process out-of-band data
-   MSG_PEEK           : constant :=          2; --  Peek at incoming data
-   MSG_EOR            : constant :=          8; --  Send end of record
-   MSG_WAITALL        : constant :=         64; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=         -1; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant :=          0;
+   MSG_OOB             : constant :=          1; --  Process out-of-band data
+   MSG_PEEK            : constant :=          2; --  Peek at incoming data
+   MSG_EOR             : constant :=          8; --  Send end of record
+   MSG_WAITALL         : constant :=         64; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=         -1; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant :=          0;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=          1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=          4; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=        512; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=          8; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=        128; --  Defer close to flush data
-   SO_BROADCAST       : constant :=         32; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=       4097; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=       4098; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=       4101; --  Emission timeout
-   SO_RCVTIMEO        : constant :=       4102; --  Reception timeout
-   SO_ERROR           : constant :=       4103; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=          9; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=         10; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=         11; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=         12; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=         13; --  Leave a multicast group
-   IP_PKTINFO         : constant :=         -1; --  Get datagram info
+   TCP_NODELAY         : constant :=          1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=          4; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=        512; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=          8; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=        128; --  Defer close to flush data
+   SO_BROADCAST        : constant :=         32; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=       4097; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=       4098; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=       4101; --  Emission timeout
+   SO_RCVTIMEO         : constant :=       4102; --  Reception timeout
+   SO_ERROR            : constant :=       4103; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=          9; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=         10; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=         11; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=         12; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=         13; --  Leave a multicast group
+   IP_PKTINFO          : constant :=         -1; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant := 2147483647; --  Maximum writev iovcnt
+   IOV_MAX             : constant := 2147483647; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -177,14 +178,32 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=          4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=          4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=          4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=          4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=         16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=         28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=        256; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=          1; --  Need buffer for Netdb ops
+   Need_Netdb_Buffer   : constant :=          1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=          1; --  Sockaddr has sa_len field
+
+   Thread_Blocking_IO : constant Boolean := True;
+   --  Set False for contexts where socket i/o are process blocking
 
    --------------------------------
    -- VxWorks-specific constants --
@@ -193,14 +212,7 @@ package GNAT.Sockets.Constants is
    --  These constants may be used only within the VxWorks version of
    --  GNAT.Sockets.Thin.
 
-   OK                 : constant :=          0; --  VxWorks generic success
-   ERROR              : constant :=         -1; --  VxWorks generic error
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
-
-   Thread_Blocking_IO : constant Boolean := True;
-   --  Set False for contexts where socket i/o are process blocking
+   OK                  : constant :=          0; --  VxWorks generic success
+   ERROR               : constant :=         -1; --  VxWorks generic error
 
 end GNAT.Sockets.Constants;
index d7556a1..b7f8fe4 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2007, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2008, Free Software Foundation, Inc.         --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 --  This file is generated automatically, do not modify it by hand! Instead,
 --  make changes to gen-soccon.c and re-run it on each target.
 
+with Interfaces.C;
 package GNAT.Sockets.Constants is
 
    --------------
    -- Families --
    --------------
 
-   AF_INET            : constant :=            2; --  IPv4 address family
-   AF_INET6           : constant :=           10; --  IPv6 address family
+   AF_INET             : constant :=          2; --  IPv4 address family
+   AF_INET6            : constant :=         10; --  IPv6 address family
 
    -----------
    -- Modes --
    -----------
 
-   SOCK_STREAM        : constant :=            1; --  Stream socket
-   SOCK_DGRAM         : constant :=            2; --  Datagram socket
+   SOCK_STREAM         : constant :=          1; --  Stream socket
+   SOCK_DGRAM          : constant :=          2; --  Datagram socket
 
    -------------------
    -- Socket errors --
    -------------------
 
-   EACCES             : constant :=           13; --  Permission denied
-   EADDRINUSE         : constant :=           98; --  Address already in use
-   EADDRNOTAVAIL      : constant :=           99; --  Cannot assign address
-   EAFNOSUPPORT       : constant :=           97; --  Addr family not supported
-   EALREADY           : constant :=          114; --  Operation in progress
-   EBADF              : constant :=            9; --  Bad file descriptor
-   ECONNABORTED       : constant :=          103; --  Connection aborted
-   ECONNREFUSED       : constant :=          111; --  Connection refused
-   ECONNRESET         : constant :=          104; --  Connection reset by peer
-   EDESTADDRREQ       : constant :=           89; --  Destination addr required
-   EFAULT             : constant :=           14; --  Bad address
-   EHOSTDOWN          : constant :=          112; --  Host is down
-   EHOSTUNREACH       : constant :=          113; --  No route to host
-   EINPROGRESS        : constant :=          115; --  Operation now in progress
-   EINTR              : constant :=            4; --  Interrupted system call
-   EINVAL             : constant :=           22; --  Invalid argument
-   EIO                : constant :=            5; --  Input output error
-   EISCONN            : constant :=          106; --  Socket already connected
-   ELOOP              : constant :=           40; --  Too many symbolic links
-   EMFILE             : constant :=           24; --  Too many open files
-   EMSGSIZE           : constant :=           90; --  Message too long
-   ENAMETOOLONG       : constant :=           36; --  Name too long
-   ENETDOWN           : constant :=          100; --  Network is down
-   ENETRESET          : constant :=          102; --  Disconn. on network reset
-   ENETUNREACH        : constant :=          101; --  Network is unreachable
-   ENOBUFS            : constant :=          105; --  No buffer space available
-   ENOPROTOOPT        : constant :=           92; --  Protocol not available
-   ENOTCONN           : constant :=          107; --  Socket not connected
-   ENOTSOCK           : constant :=           88; --  Operation on non socket
-   EOPNOTSUPP         : constant :=           95; --  Operation not supported
-   EPFNOSUPPORT       : constant :=           96; --  Unknown protocol family
-   EPROTONOSUPPORT    : constant :=           93; --  Unknown protocol
-   EPROTOTYPE         : constant :=           91; --  Unknown protocol type
-   ESHUTDOWN          : constant :=          108; --  Cannot send once shutdown
-   ESOCKTNOSUPPORT    : constant :=           94; --  Socket type not supported
-   ETIMEDOUT          : constant :=          110; --  Connection timed out
-   ETOOMANYREFS       : constant :=          109; --  Too many references
-   EWOULDBLOCK        : constant :=           11; --  Operation would block
+   EACCES              : constant :=         13; --  Permission denied
+   EADDRINUSE          : constant :=         98; --  Address already in use
+   EADDRNOTAVAIL       : constant :=         99; --  Cannot assign address
+   EAFNOSUPPORT        : constant :=         97; --  Addr family not supported
+   EALREADY            : constant :=        114; --  Operation in progress
+   EBADF               : constant :=          9; --  Bad file descriptor
+   ECONNABORTED        : constant :=        103; --  Connection aborted
+   ECONNREFUSED        : constant :=        111; --  Connection refused
+   ECONNRESET          : constant :=        104; --  Connection reset by peer
+   EDESTADDRREQ        : constant :=         89; --  Destination addr required
+   EFAULT              : constant :=         14; --  Bad address
+   EHOSTDOWN           : constant :=        112; --  Host is down
+   EHOSTUNREACH        : constant :=        113; --  No route to host
+   EINPROGRESS         : constant :=        115; --  Operation now in progress
+   EINTR               : constant :=          4; --  Interrupted system call
+   EINVAL              : constant :=         22; --  Invalid argument
+   EIO                 : constant :=          5; --  Input output error
+   EISCONN             : constant :=        106; --  Socket already connected
+   ELOOP               : constant :=         40; --  Too many symbolic links
+   EMFILE              : constant :=         24; --  Too many open files
+   EMSGSIZE            : constant :=         90; --  Message too long
+   ENAMETOOLONG        : constant :=         36; --  Name too long
+   ENETDOWN            : constant :=        100; --  Network is down
+   ENETRESET           : constant :=        102; --  Disconn. on network reset
+   ENETUNREACH         : constant :=        101; --  Network is unreachable
+   ENOBUFS             : constant :=        105; --  No buffer space available
+   ENOPROTOOPT         : constant :=         92; --  Protocol not available
+   ENOTCONN            : constant :=        107; --  Socket not connected
+   ENOTSOCK            : constant :=         88; --  Operation on non socket
+   EOPNOTSUPP          : constant :=         95; --  Operation not supported
+   EPFNOSUPPORT        : constant :=         96; --  Unknown protocol family
+   EPROTONOSUPPORT     : constant :=         93; --  Unknown protocol
+   EPROTOTYPE          : constant :=         91; --  Unknown protocol type
+   ESHUTDOWN           : constant :=        108; --  Cannot send once shutdown
+   ESOCKTNOSUPPORT     : constant :=         94; --  Socket type not supported
+   ETIMEDOUT           : constant :=        110; --  Connection timed out
+   ETOOMANYREFS        : constant :=        109; --  Too many references
+   EWOULDBLOCK         : constant :=         11; --  Operation would block
 
    -----------------
    -- Host errors --
    -----------------
 
-   HOST_NOT_FOUND     : constant :=            1; --  Unknown host
-   TRY_AGAIN          : constant :=            2; --  Host name lookup failure
-   NO_DATA            : constant :=            4; --  No data record for name
-   NO_RECOVERY        : constant :=            3; --  Non recoverable errors
+   HOST_NOT_FOUND      : constant :=          1; --  Unknown host
+   TRY_AGAIN           : constant :=          2; --  Host name lookup failure
+   NO_DATA             : constant :=          4; --  No data record for name
+   NO_RECOVERY         : constant :=          3; --  Non recoverable errors
 
    -------------------
    -- Control flags --
    -------------------
 
-   FIONBIO            : constant :=        21537; --  Set/clear non-blocking io
-   FIONREAD           : constant :=        21531; --  How many bytes to read
+   FIONBIO             : constant :=      21537; --  Set/clear non-blocking io
+   FIONREAD            : constant :=      21531; --  How many bytes to read
 
    --------------------
    -- Shutdown modes --
    --------------------
 
-   SHUT_RD            : constant :=            0; --  No more recv
-   SHUT_WR            : constant :=            1; --  No more send
-   SHUT_RDWR          : constant :=            2; --  No more recv/send
+   SHUT_RD             : constant :=          0; --  No more recv
+   SHUT_WR             : constant :=          1; --  No more send
+   SHUT_RDWR           : constant :=          2; --  No more recv/send
 
    ---------------------
    -- Protocol levels --
    ---------------------
 
-   SOL_SOCKET         : constant :=            1; --  Options for socket level
-   IPPROTO_IP         : constant :=            0; --  Dummy protocol for IP
-   IPPROTO_UDP        : constant :=           17; --  UDP
-   IPPROTO_TCP        : constant :=            6; --  TCP
+   SOL_SOCKET          : constant :=          1; --  Options for socket level
+   IPPROTO_IP          : constant :=          0; --  Dummy protocol for IP
+   IPPROTO_UDP         : constant :=         17; --  UDP
+   IPPROTO_TCP         : constant :=          6; --  TCP
 
    -------------------
    -- Request flags --
    -------------------
 
-   MSG_OOB            : constant :=            1; --  Process out-of-band data
-   MSG_PEEK           : constant :=            2; --  Peek at incoming data
-   MSG_EOR            : constant :=          128; --  Send end of record
-   MSG_WAITALL        : constant :=          256; --  Wait for full reception
-   MSG_NOSIGNAL       : constant :=        16384; --  No SIGPIPE on send
-   MSG_Forced_Flags   : constant := MSG_NOSIGNAL;
+   MSG_OOB             : constant :=          1; --  Process out-of-band data
+   MSG_PEEK            : constant :=          2; --  Peek at incoming data
+   MSG_EOR             : constant :=        128; --  Send end of record
+   MSG_WAITALL         : constant :=        256; --  Wait for full reception
+   MSG_NOSIGNAL        : constant :=      16384; --  No SIGPIPE on send
+   MSG_Forced_Flags    : constant := MSG_NOSIGNAL;
    --  Flags set on all send(2) calls
 
    --------------------
    -- Socket options --
    --------------------
 
-   TCP_NODELAY        : constant :=            1; --  Do not coalesce packets
-   SO_REUSEADDR       : constant :=            2; --  Bind reuse local address
-   SO_REUSEPORT       : constant :=           -1; --  Bind reuse port number
-   SO_KEEPALIVE       : constant :=            9; --  Enable keep-alive msgs
-   SO_LINGER          : constant :=           13; --  Defer close to flush data
-   SO_BROADCAST       : constant :=            6; --  Can send broadcast msgs
-   SO_SNDBUF          : constant :=            7; --  Set/get send buffer size
-   SO_RCVBUF          : constant :=            8; --  Set/get recv buffer size
-   SO_SNDTIMEO        : constant :=           21; --  Emission timeout
-   SO_RCVTIMEO        : constant :=           20; --  Reception timeout
-   SO_ERROR           : constant :=            4; --  Get/clear error status
-   IP_MULTICAST_IF    : constant :=           32; --  Set/get mcast interface
-   IP_MULTICAST_TTL   : constant :=           33; --  Set/get multicast TTL
-   IP_MULTICAST_LOOP  : constant :=           34; --  Set/get mcast loopback
-   IP_ADD_MEMBERSHIP  : constant :=           35; --  Join a multicast group
-   IP_DROP_MEMBERSHIP : constant :=           36; --  Leave a multicast group
-   IP_PKTINFO         : constant :=            8; --  Get datagram info
+   TCP_NODELAY         : constant :=          1; --  Do not coalesce packets
+   SO_REUSEADDR        : constant :=          2; --  Bind reuse local address
+   SO_REUSEPORT        : constant :=         -1; --  Bind reuse port number
+   SO_KEEPALIVE        : constant :=          9; --  Enable keep-alive msgs
+   SO_LINGER           : constant :=         13; --  Defer close to flush data
+   SO_BROADCAST        : constant :=          6; --  Can send broadcast msgs
+   SO_SNDBUF           : constant :=          7; --  Set/get send buffer size
+   SO_RCVBUF           : constant :=          8; --  Set/get recv buffer size
+   SO_SNDTIMEO         : constant :=         21; --  Emission timeout
+   SO_RCVTIMEO         : constant :=         20; --  Reception timeout
+   SO_ERROR            : constant :=          4; --  Get/clear error status
+   IP_MULTICAST_IF     : constant :=         32; --  Set/get mcast interface
+   IP_MULTICAST_TTL    : constant :=         33; --  Set/get multicast TTL
+   IP_MULTICAST_LOOP   : constant :=         34; --  Set/get mcast loopback
+   IP_ADD_MEMBERSHIP   : constant :=         35; --  Join a multicast group
+   IP_DROP_MEMBERSHIP  : constant :=         36; --  Leave a multicast group
+   IP_PKTINFO          : constant :=          8; --  Get datagram info
 
    -------------------
    -- System limits --
    -------------------
 
-   IOV_MAX            : constant :=   2147483647; --  Maximum writev iovcnt
+   IOV_MAX             : constant := 2147483647; --  Maximum writev iovcnt
 
    ----------------------
    -- Type definitions --
@@ -184,18 +185,29 @@ package GNAT.Sockets.Constants is
 
    --  Sizes (in bytes) of the components of struct timeval
 
-   SIZEOF_tv_sec      : constant :=            4; --  tv_sec
-   SIZEOF_tv_usec     : constant :=            4; --  tv_usec
+   SIZEOF_tv_sec       : constant :=          4; --  tv_sec
+   SIZEOF_tv_usec      : constant :=          4; --  tv_usec
+
+   --  Sizes of protocol specific address types (for sockaddr.sa_len)
+
+   SIZEOF_sockaddr_in  : constant :=         16; --  struct sockaddr_in
+   SIZEOF_sockaddr_in6 : constant :=         28; --  struct sockaddr_in6
+
+   --  Size of file descriptor sets
+
+   SIZEOF_fd_set       : constant :=        128; --  fd_set
+
+   --  Fields of struct hostent
+
+   subtype H_Addrtype_T is Interfaces.C.int;
+   subtype H_Length_T   is Interfaces.C.int;
 
    ----------------------------------------
    -- Properties of supported interfaces --
    ----------------------------------------
 
-   Need_Netdb_Buffer  : constant :=            1; --  Need buffer for Netdb ops
-
-   ----------------------
-   -- Additional flags --
-   ----------------------
+   Need_Netdb_Buffer   : constant :=          1; --  Need buffer for Netdb ops
+   Has_Sockaddr_Len    : constant :=          0; --  Sockaddr has sa_len field
 
    Thread_Blocking_IO : constant Boolean := True;
    --  Set False for contexts where socket i/o are process blocking
index 981495f..4b39940 100644 (file)
@@ -36,7 +36,9 @@ with Ada.Exceptions;           use Ada.Exceptions;
 with Ada.Unchecked_Conversion;
 
 with Interfaces.C.Strings;
+
 with GNAT.Sockets.Constants;
+with GNAT.Sockets.Thin_Common;          use GNAT.Sockets.Thin_Common;
 with GNAT.Sockets.Thin;                 use GNAT.Sockets.Thin;
 with GNAT.Sockets.Thin.Task_Safe_NetDB; use GNAT.Sockets.Thin.Task_Safe_NetDB;
 
@@ -48,6 +50,8 @@ with System; use System;
 
 package body GNAT.Sockets is
 
+   package C renames Interfaces.C;
+
    use type C.int;
 
    Finalized   : Boolean := False;
@@ -63,10 +67,6 @@ package body GNAT.Sockets is
 
    --  Correspondence tables
 
-   Families : constant array (Family_Type) of C.int :=
-                (Family_Inet  => Constants.AF_INET,
-                 Family_Inet6 => Constants.AF_INET6);
-
    Levels : constant array (Level_Type) of C.int :=
               (Socket_Level              => Constants.SOL_SOCKET,
                IP_Protocol_For_IP_Level  => Constants.IPPROTO_IP,
@@ -118,9 +118,6 @@ package body GNAT.Sockets is
    Hex_To_Char : constant String (1 .. 16) := "0123456789ABCDEF";
    --  Use to print in hexadecimal format
 
-   function To_In_Addr is new Ada.Unchecked_Conversion (C.int, In_Addr);
-   function To_Int     is new Ada.Unchecked_Conversion (In_Addr, C.int);
-
    function Err_Code_Image (E : Integer) return String;
    --  Return the value of E surrounded with brackets
 
@@ -162,7 +159,7 @@ package body GNAT.Sockets is
    function Is_IP_Address (Name : String) return Boolean;
    --  Return true when Name is an IP address in standard dot notation
 
-   function To_In_Addr (Addr : Inet_Addr_Type) return Thin.In_Addr;
+   function To_In_Addr (Addr : Inet_Addr_Type) return In_Addr;
    procedure To_Inet_Addr
      (Addr   : In_Addr;
       Result : out Inet_Addr_Type);
@@ -230,6 +227,18 @@ package body GNAT.Sockets is
      (Stream : in out Stream_Socket_Stream_Type;
       Item   : Ada.Streams.Stream_Element_Array);
 
+   procedure Wait_On_Socket
+     (Socket    : Socket_Type;
+      For_Read  : Boolean;
+      Timeout   : Selector_Duration;
+      Selector  : access Selector_Type := null;
+      Status    : out Selector_Status);
+   --  Common code for variants of socket operations supporting a timeout:
+   --  block in Check_Selector on Socket for at most the indicated timeout.
+   --  If For_Read is True, Socket is added to the read set for this call, else
+   --  it is added to the write set. If no selector is provided, a local one is
+   --  created for this call and destroyed prior to returning.
+
    ---------
    -- "+" --
    ---------
@@ -282,6 +291,37 @@ package body GNAT.Sockets is
       Address.Port := Port_Type (Network_To_Short (Sin.Sin_Port));
    end Accept_Socket;
 
+   -------------------
+   -- Accept_Socket --
+   -------------------
+
+   procedure Accept_Socket
+     (Server   : Socket_Type;
+      Socket   : out Socket_Type;
+      Address  : out Sock_Addr_Type;
+      Timeout  : Selector_Duration;
+      Selector : access Selector_Type := null;
+      Status   : out Selector_Status)
+   is
+   begin
+      --  Wait for socket to become available for reading
+
+      Wait_On_Socket
+        (Socket    => Server,
+         For_Read  => True,
+         Timeout   => Timeout,
+         Selector  => Selector,
+         Status    => Status);
+
+      --  Accept connection if available
+
+      if Status = Completed then
+         Accept_Socket (Server, Socket, Address);
+      else
+         Socket := No_Socket;
+      end if;
+   end Accept_Socket;
+
    ---------------
    -- Addresses --
    ---------------
@@ -356,14 +396,14 @@ package body GNAT.Sockets is
       Res : C.int;
       Sin : aliased Sockaddr_In;
       Len : constant C.int := Sin'Size / 8;
+      --  This assumes that Address.Family = Family_Inet???
 
    begin
       if Address.Family = Family_Inet6 then
          raise Socket_Error with "IPv6 not supported";
       end if;
 
-      Set_Length  (Sin'Unchecked_Access, Len);
-      Set_Family  (Sin'Unchecked_Access, Families (Address.Family));
+      Set_Family  (Sin.Sin_Family, Address.Family);
       Set_Address (Sin'Unchecked_Access, To_In_Addr (Address.Addr));
       Set_Port
         (Sin'Unchecked_Access,
@@ -387,12 +427,16 @@ package body GNAT.Sockets is
       Status       : out Selector_Status;
       Timeout      : Selector_Duration := Forever)
    is
-      E_Socket_Set : Socket_Set_Type; --  (No_Socket, No_Socket_Set)
+      E_Socket_Set : Socket_Set_Type; --  (No_Socket, No_Fd_Set_Access)
    begin
       Check_Selector
         (Selector, R_Socket_Set, W_Socket_Set, E_Socket_Set, Status, Timeout);
    end Check_Selector;
 
+   --------------------
+   -- Check_Selector --
+   --------------------
+
    procedure Check_Selector
      (Selector     : in out Selector_Type;
       R_Socket_Set : in out Socket_Set_Type;
@@ -585,8 +629,7 @@ package body GNAT.Sockets is
          raise Socket_Error with "IPv6 not supported";
       end if;
 
-      Set_Length (Sin'Unchecked_Access, Len);
-      Set_Family (Sin'Unchecked_Access, Families (Server.Family));
+      Set_Family  (Sin.Sin_Family, Server.Family);
       Set_Address (Sin'Unchecked_Access, To_In_Addr (Server.Addr));
       Set_Port
         (Sin'Unchecked_Access,
@@ -600,6 +643,55 @@ package body GNAT.Sockets is
    end Connect_Socket;
 
    --------------------
+   -- Connect_Socket --
+   --------------------
+
+   procedure Connect_Socket
+     (Socket   : Socket_Type;
+      Server   : Sock_Addr_Type;
+      Timeout  : Selector_Duration;
+      Selector : access Selector_Type := null;
+      Status   : out Selector_Status)
+   is
+      Req : Request_Type;
+      --  Used to set Socket to non-blocking I/O
+
+   begin
+      --  Set the socket to non-blocking I/O
+
+      Req := (Name => Non_Blocking_IO, Enabled => True);
+      Control_Socket (Socket, Request => Req);
+
+      --  Start operation (non-blocking), will raise Socket_Error with
+      --  EINPROGRESS.
+
+      begin
+         Connect_Socket (Socket, Server);
+      exception
+         when E : Socket_Error =>
+            if Resolve_Exception (E) = Operation_Now_In_Progress then
+               null;
+            else
+               raise;
+            end if;
+      end;
+
+      --  Wait for socket to become available for writing
+
+      Wait_On_Socket
+        (Socket    => Socket,
+         For_Read  => False,
+         Timeout   => Timeout,
+         Selector  => Selector,
+         Status    => Status);
+
+      --  Reset the socket to blocking I/O
+
+      Req := (Name => Non_Blocking_IO, Enabled => False);
+      Control_Socket (Socket, Request => Req);
+   end Connect_Socket;
+
+   --------------------
    -- Control_Socket --
    --------------------
 
@@ -704,9 +796,9 @@ package body GNAT.Sockets is
 
    procedure Empty  (Item : in out Socket_Set_Type) is
    begin
-      if Item.Set /= No_Socket_Set then
+      if Item.Set /= No_Fd_Set_Access then
          Free_Socket_Set (Item.Set);
-         Item.Set := No_Socket_Set;
+         Item.Set := No_Fd_Set_Access;
       end if;
 
       Item.Last := No_Socket;
@@ -1257,7 +1349,7 @@ package body GNAT.Sockets is
 
    procedure Listen_Socket
      (Socket : Socket_Type;
-      Length : Positive := 15)
+      Length : Natural := 15)
    is
       Res : constant C.int := C_Listen (C.int (Socket), C.int (Length));
    begin
@@ -1273,7 +1365,7 @@ package body GNAT.Sockets is
    procedure Narrow (Item : in out Socket_Set_Type) is
       Last : aliased C.int := C.int (Item.Last);
    begin
-      if Item.Set /= No_Socket_Set then
+      if Item.Set /= No_Fd_Set_Access then
          Last_Socket_In_Set (Item.Set, Last'Unchecked_Access);
          Item.Last := Socket_Type (Last);
       end if;
@@ -1297,6 +1389,63 @@ package body GNAT.Sockets is
       return To_String (S.Official);
    end Official_Name;
 
+   --------------------
+   -- Wait_On_Socket --
+   --------------------
+
+   procedure Wait_On_Socket
+     (Socket    : Socket_Type;
+      For_Read  : Boolean;
+      Timeout   : Selector_Duration;
+      Selector  : access Selector_Type := null;
+      Status    : out Selector_Status)
+   is
+      type Local_Selector_Access is access Selector_Type;
+      for Local_Selector_Access'Storage_Size use Selector_Type'Size;
+
+      S : Selector_Access;
+      --  Selector to use for waiting
+
+      R_Fd_Set : Socket_Set_Type;
+      W_Fd_Set : Socket_Set_Type;
+      --  Socket sets, empty at elaboration
+
+   begin
+      --  Create selector if not provided by the user
+
+      if Selector = null then
+         declare
+            Local_S : constant Local_Selector_Access := new Selector_Type;
+         begin
+            S := Local_S.all'Unchecked_Access;
+            Create_Selector (S.all);
+         end;
+
+      else
+         S := Selector.all'Access;
+      end if;
+
+      if For_Read then
+         Set (R_Fd_Set, Socket);
+      else
+         Set (W_Fd_Set, Socket);
+      end if;
+
+      Check_Selector (S.all, R_Fd_Set, W_Fd_Set, Status, Timeout);
+
+      --  Cleanup actions (required in all cases to avoid memory leaks)
+
+      if For_Read then
+         Empty (R_Fd_Set);
+      else
+         Empty (W_Fd_Set);
+      end if;
+
+      if Selector = null then
+         Close_Selector (S.all);
+      end if;
+   end Wait_On_Socket;
+
    -----------------
    -- Port_Number --
    -----------------
@@ -1638,8 +1787,7 @@ package body GNAT.Sockets is
       Len : constant C.int := Sin'Size / 8;
 
    begin
-      Set_Length (Sin'Unchecked_Access, Len);
-      Set_Family (Sin'Unchecked_Access, Families (To.Family));
+      Set_Family  (Sin.Sin_Family, To.Family);
       Set_Address (Sin'Unchecked_Access, To_In_Addr (To.Addr));
       Set_Port
         (Sin'Unchecked_Access,
@@ -1710,8 +1858,8 @@ package body GNAT.Sockets is
 
    procedure Set (Item : in out Socket_Set_Type; Socket : Socket_Type) is
    begin
-      if Item.Set = No_Socket_Set then
-         Item.Set  := New_Socket_Set (No_Socket_Set);
+      if Item.Set = No_Fd_Set_Access then
+         Item.Set  := New_Socket_Set (No_Fd_Set_Access);
          Item.Last := Socket;
 
       elsif Item.Last < Socket then
@@ -1972,7 +2120,7 @@ package body GNAT.Sockets is
    -- To_In_Addr --
    ----------------
 
-   function To_In_Addr (Addr : Inet_Addr_Type) return Thin.In_Addr is
+   function To_In_Addr (Addr : Inet_Addr_Type) return In_Addr is
    begin
       if Addr.Family = Family_Inet then
          return (S_B1 => C.unsigned_char (Addr.Sin_V4 (1)),
index 55b6813..7ebf243 100644 (file)
@@ -52,8 +52,6 @@ with Ada.Exceptions;
 with Ada.Streams;
 with Ada.Unchecked_Deallocation;
 
-with System;
-
 package GNAT.Sockets is
 
    --  Sockets are designed to provide a consistent communication facility
@@ -397,6 +395,31 @@ package GNAT.Sockets is
 
    No_Socket : constant Socket_Type;
 
+   type Selector_Type is limited private;
+   type Selector_Access is access all Selector_Type;
+   --  Selector objects are used to wait for i/o events to occur on sockets
+
+   --  Timeval_Duration is a subtype of Standard.Duration because the full
+   --  range of Standard.Duration cannot be represented in the equivalent C
+   --  structure. Moreover, negative values are not allowed to avoid system
+   --  incompatibilities.
+
+   Immediate : constant := 0.0;
+   Forever   : constant := Duration (Integer'Last) * 1.0;
+   --  Should be Duration 2 ** (Constants.SIZEOF_tv_sec * 8 - 1) - 1 ???
+
+   subtype Timeval_Duration is Duration range Immediate .. Forever;
+
+   subtype Selector_Duration is Timeval_Duration;
+   --  Timeout value for selector operations
+
+   type Selector_Status is (Completed, Expired, Aborted);
+   --  Completion status of a selector operation, indicated as follows:
+   --    Complete: one of the expected events occurred
+   --    Expired:  no event occurred before the expiration of the timeout
+   --    Aborted:  an external action cancelled the wait operation before
+   --              any event occurred.
+
    Socket_Error : exception;
    --  There is only one exception in this package to deal with an error during
    --  a socket routine. Once raised, its message contains a string describing
@@ -435,10 +458,10 @@ package GNAT.Sockets is
    No_Port  : constant Port_Type;
 
    type Inet_Addr_Type (Family : Family_Type := Family_Inet) is private;
-   --  An Internet address depends on an address family (IPv4 contains 4
-   --  octets and IPv6 contains 16 octets). Any_Inet_Addr is a special value
-   --  treated like a wildcard enabling all addresses. No_Inet_Addr provides a
-   --  special value to denote uninitialized inet addresses.
+   --  An Internet address depends on an address family (IPv4 contains 4 octets
+   --  and IPv6 contains 16 octets). Any_Inet_Addr is a special value treated
+   --  like a wildcard enabling all addresses. No_Inet_Addr provides a special
+   --  value to denote uninitialized inet addresses.
 
    Any_Inet_Addr       : constant Inet_Addr_Type;
    No_Inet_Addr        : constant Inet_Addr_Type;
@@ -508,8 +531,8 @@ package GNAT.Sockets is
    function Get_Host_By_Name
      (Name : String) return Host_Entry_Type;
    --  Return host entry structure for the given host name. Here name is
-   --  either a host name, or an IP address. If Name is an IP address, this is
-   --  equivalent to Get_Host_By_Address (Inet_Addr (Name)).
+   --  either a host name, or an IP address. If Name is an IP address, this
+   --  is equivalent to Get_Host_By_Address (Inet_Addr (Name)).
 
    function Host_Name return String;
    --  Return the name of the current host
@@ -549,10 +572,10 @@ package GNAT.Sockets is
    Service_Error : exception;
    --  Comment required ???
 
-   --  Errors are described by an enumeration type. There is only one
-   --  exception Socket_Error in this package to deal with an error during a
-   --  socket routine. Once raised, its message contains the error code
-   --  between brackets and a string describing the error code.
+   --  Errors are described by an enumeration type. There is only one exception
+   --  Socket_Error in this package to deal with an error during a socket
+   --  routine. Once raised, its message contains the error code between
+   --  brackets and a string describing the error code.
 
    --  The name of the enumeration constant documents the error condition
 
@@ -602,16 +625,6 @@ package GNAT.Sockets is
       Unknown_Server_Error,
       Cannot_Resolve_Error);
 
-   --  Timeval_Duration is a subtype of Standard.Duration because the full
-   --  range of Standard.Duration cannot be represented in the equivalent C
-   --  structure. Moreover, negative values are not allowed to avoid system
-   --  incompatibilities.
-
-   Immediate : constant := 0.0;
-   Forever   : constant := Duration (Integer'Last) * 1.0;
-
-   subtype Timeval_Duration is Duration range Immediate .. Forever;
-
    --  Get_Socket_Options and Set_Socket_Options manipulate options associated
    --  with a socket. Options may exist at multiple protocol levels in the
    --  communication stack. Socket_Level is the uppermost socket level.
@@ -722,9 +735,9 @@ package GNAT.Sockets is
    --  Socket_Stream).
 
    Peek_At_Incoming_Data : constant Request_Flag_Type;
-   --  This flag causes the receive operation to return data from the
-   --  beginning of the receive queue without removing that data from the
-   --  queue. A subsequent receive call will return the same data.
+   --  This flag causes the receive operation to return data from the beginning
+   --  of the receive queue without removing that data from the queue. A
+   --  subsequent receive call will return the same data.
 
    Wait_For_A_Full_Reception : constant Request_Flag_Type;
    --  This flag requests that the operation block until the full request is
@@ -766,6 +779,20 @@ package GNAT.Sockets is
    --  is filled in with the address of the connection. Raises Socket_Error on
    --  error.
 
+   procedure Accept_Socket
+     (Server   : Socket_Type;
+      Socket   : out Socket_Type;
+      Address  : out Sock_Addr_Type;
+      Timeout  : Selector_Duration;
+      Selector : access Selector_Type := null;
+      Status   : out Selector_Status);
+   --  Accept a new connection on Server using Accept_Socket, waiting no longer
+   --  than the given timeout duration. Status is set to indicate whether the
+   --  operation completed successully, timed out, or was aborted. If Selector
+   --  is not null, the designated selector is used to wait for the socket to
+   --  become available, else a private selector object is created by this
+   --  procedure and destroyed before it returns.
+
    procedure Bind_Socket
      (Socket  : Socket_Type;
       Address : Sock_Addr_Type);
@@ -781,12 +808,25 @@ package GNAT.Sockets is
    --  Make a connection to another socket which has the address of Server.
    --  Raises Socket_Error on error.
 
+   procedure Connect_Socket
+     (Socket   : Socket_Type;
+      Server   : Sock_Addr_Type;
+      Timeout  : Selector_Duration;
+      Selector : access Selector_Type := null;
+      Status   : out Selector_Status);
+   --  Connect Socket to the given Server address using Connect_Socket, waiting
+   --  no longer than the given timeout duration. Status is set to indicate
+   --  whether the operation completed successully, timed out, or was aborted.
+   --  If Selector is not null, the designated selector is used to wait for the
+   --  socket to become available, else a private selector object is created
+   --  by this procedure and destroyed before it returns.
+
    procedure Control_Socket
      (Socket  : Socket_Type;
       Request : in out Request_Type);
    --  Obtain or set parameter values that control the socket. This control
-   --  differs from the socket options in that they are not specific to
-   --  sockets but are available for any device.
+   --  differs from the socket options in that they are not specific to sockets
+   --  but are available for any device.
 
    function Get_Peer_Name (Socket : Socket_Type) return Sock_Addr_Type;
    --  Return the peer or remote socket address of a socket. Raise
@@ -794,22 +834,23 @@ package GNAT.Sockets is
 
    function Get_Socket_Name (Socket : Socket_Type) return Sock_Addr_Type;
    --  Return the local or current socket address of a socket. Return
-   --  No_Sock_Addr on error (for instance, socket closed or not locally
-   --  bound).
+   --  No_Sock_Addr on error (e.g. socket closed or not locally bound).
 
    function Get_Socket_Option
      (Socket : Socket_Type;
       Level  : Level_Type := Socket_Level;
       Name   : Option_Name) return Option_Type;
-   --  Get the options associated with a socket. Raises Socket_Error
-   --  on error.
+   --  Get the options associated with a socket. Raises Socket_Error on error
 
    procedure Listen_Socket
      (Socket : Socket_Type;
-      Length : Positive := 15);
+      Length : Natural := 15);
    --  To accept connections, a socket is first created with Create_Socket,
    --  a willingness to accept incoming connections and a queue Length for
    --  incoming connections are specified. Raise Socket_Error on error.
+   --  The queue length of 15 is an example value that should be appropriate
+   --  in usual cases. It can be adjusted according to each application's
+   --  particular requirements.
 
    procedure Receive_Socket
      (Socket : Socket_Type;
@@ -959,11 +1000,6 @@ package GNAT.Sockets is
    --  operation is typically to add a socket in one of the socket sets when
    --  the timeout is set to forever.
 
-   type Selector_Type is limited private;
-   type Selector_Access is access all Selector_Type;
-
-   subtype Selector_Duration is Timeval_Duration;
-
    procedure Create_Selector (Selector : out Selector_Type);
    --  Create a new selector
 
@@ -973,8 +1009,6 @@ package GNAT.Sockets is
    --  no other task still using Selector (i.e. still executing Check_Selector
    --  or Abort_Selector on this Selector).
 
-   type Selector_Status is (Completed, Expired, Aborted);
-
    procedure Check_Selector
      (Selector     : in out Selector_Type;
       R_Socket_Set : in out Socket_Set_Type;
@@ -1009,6 +1043,16 @@ package GNAT.Sockets is
    procedure Abort_Selector (Selector : Selector_Type);
    --  Send an abort signal to the selector
 
+   type Fd_Set_Access is private;
+   No_Fd_Set_Access : constant Fd_Set_Access;
+   --  ??? This type must not be used directly, it needs to be visible because
+   --  it is used in the visible part of GNAT.Sockets.Thin_Common. This is
+   --  really an inversion of abstraction. The private part of GNAT.Sockets
+   --  needs to have visibility on this type, but since Thin_Common is a child
+   --  of Sokcets, the type can't be declared there. The correct fix would
+   --  be to move the thin sockets binding outside of GNAT.Sockets altogether,
+   --  e.g. by renaming it to GNAT.Sockets_Thin.
+
 private
 
    type Socket_Type is new Integer;
@@ -1017,18 +1061,19 @@ private
    type Selector_Type is limited record
       R_Sig_Socket : Socket_Type := No_Socket;
       W_Sig_Socket : Socket_Type := No_Socket;
+      --  Signalling sockets used to abort a select operation
    end record;
 
    pragma Volatile (Selector_Type);
 
-   --  The two signalling sockets are used to abort a select operation
-
-   subtype Socket_Set_Access is System.Address;
-   No_Socket_Set : constant Socket_Set_Access := System.Null_Address;
+   type Fd_Set is null record;
+   type Fd_Set_Access is access all Fd_Set;
+   pragma Convention (C, Fd_Set_Access);
+   No_Fd_Set_Access : constant Fd_Set_Access := null;
 
    type Socket_Set_Type is record
       Last : Socket_Type       := No_Socket;
-      Set  : Socket_Set_Access := No_Socket_Set;
+      Set  : Fd_Set_Access;
    end record;
 
    subtype Inet_Addr_Comp_Type is Natural range 0 .. 255;
index 78d5c3f..ad99f9b 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 2001-2007, AdaCore                     --
+--                     Copyright (C) 2001-2008, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 
 with Interfaces.C.Strings; use Interfaces.C.Strings;
 with System;               use System;
+with GNAT.Sockets.Constants;
 
 package body GNAT.Sockets.Thin is
 
    use type C.unsigned;
+   use type C.int;
 
    WSAData_Dummy : array (1 .. 512) of C.int;
 
@@ -294,7 +296,7 @@ package body GNAT.Sockets.Thin is
 
       RFS  : constant Fd_Set_Access := Readfds;
       WFS  : constant Fd_Set_Access := Writefds;
-      WFSC : Fd_Set_Access := No_Fd_Set;
+      WFSC : Fd_Set_Access := No_Fd_Set_Access;
       EFS  : Fd_Set_Access := Exceptfds;
       Res  : C.int;
       S    : aliased C.int;
@@ -310,10 +312,10 @@ package body GNAT.Sockets.Thin is
       --  the initial write fd set, then move the socket from the
       --  exception fd set to the write fd set.
 
-      if WFS /= No_Fd_Set then
+      if WFS /= No_Fd_Set_Access then
          --  Add any socket present in write fd set into exception fd set
 
-         if EFS = No_Fd_Set then
+         if EFS = No_Fd_Set_Access then
             EFS := New_Socket_Set (WFS);
 
          else
@@ -337,7 +339,7 @@ package body GNAT.Sockets.Thin is
 
       Res := Standard_Select (Nfds, RFS, WFS, EFS, Timeout);
 
-      if EFS /= No_Fd_Set then
+      if EFS /= No_Fd_Set_Access then
          declare
             EFSC    : constant Fd_Set_Access := New_Socket_Set (EFS);
             Flag    : constant C.int := Constants.MSG_PEEK + Constants.MSG_OOB;
@@ -372,7 +374,7 @@ package body GNAT.Sockets.Thin is
                   --  set. Otherwise, ignore this event since the user
                   --  is not watching for it.
 
-                  if WFSC /= No_Fd_Set
+                  if WFSC /= No_Fd_Set_Access
                     and then (Is_Socket_In_Set (WFSC, S) /= 0)
                   then
                      Insert_Socket_In_Set (WFS, S);
@@ -383,14 +385,14 @@ package body GNAT.Sockets.Thin is
             Free_Socket_Set (EFSC);
          end;
 
-         if Exceptfds = No_Fd_Set then
+         if Exceptfds = No_Fd_Set_Access then
             Free_Socket_Set (EFS);
          end if;
       end if;
 
       --  Free any copy of write fd set
 
-      if WFSC /= No_Fd_Set then
+      if WFSC /= No_Fd_Set_Access then
          Free_Socket_Set (WFSC);
       end if;
 
@@ -473,57 +475,6 @@ package body GNAT.Sockets.Thin is
       end if;
    end Initialize;
 
-   -----------------
-   -- Set_Address --
-   -----------------
-
-   procedure Set_Address
-     (Sin     : Sockaddr_In_Access;
-      Address : In_Addr)
-   is
-   begin
-      Sin.Sin_Addr := Address;
-   end Set_Address;
-
-   ----------------
-   -- Set_Family --
-   ----------------
-
-   procedure Set_Family
-     (Sin    : Sockaddr_In_Access;
-      Family : C.int)
-   is
-   begin
-      Sin.Sin_Family := C.unsigned_short (Family);
-   end Set_Family;
-
-   ----------------
-   -- Set_Length --
-   ----------------
-
-   procedure Set_Length
-     (Sin : Sockaddr_In_Access;
-      Len : C.int)
-   is
-      pragma Unreferenced (Sin);
-      pragma Unreferenced (Len);
-
-   begin
-      null;
-   end Set_Length;
-
-   --------------
-   -- Set_Port --
-   --------------
-
-   procedure Set_Port
-     (Sin  : Sockaddr_In_Access;
-      Port : C.unsigned_short)
-   is
-   begin
-      Sin.Sin_Port := Port;
-   end Set_Port;
-
    --------------------
    -- Signalling_Fds --
    --------------------
index 906b669..2315640 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---                     Copyright (C) 2001-2007, AdaCore                     --
+--                     Copyright (C) 2001-2008, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 
 --  This version is for NT
 
-with Interfaces.C.Pointers;
 with Interfaces.C.Strings;
 
-with GNAT.Sockets.Constants;
+with GNAT.Sockets.Thin_Common;
 
 with System;
 
 package GNAT.Sockets.Thin is
 
-   package C renames Interfaces.C;
-
-   use type C.int;
-   --  So that we can declare the Failure constant below
+   use Thin_Common;
 
-   Success : constant C.int :=  0;
-   Failure : constant C.int := -1;
+   package C renames Interfaces.C;
 
    function Socket_Errno return Integer;
    --  Returns last socket error number
@@ -77,158 +72,6 @@ package GNAT.Sockets.Thin is
 
    end Host_Error_Messages;
 
-   subtype Fd_Set_Access is System.Address;
-   No_Fd_Set : constant Fd_Set_Access := System.Null_Address;
-
-   type time_t is
-     range -2 ** (8 * Constants.SIZEOF_tv_sec - 1)
-         .. 2 ** (8 * Constants.SIZEOF_tv_sec - 1) - 1;
-   for time_t'Size use 8 * Constants.SIZEOF_tv_sec;
-   pragma Convention (C, time_t);
-
-   type suseconds_t is
-     range -2 ** (8 * Constants.SIZEOF_tv_usec - 1)
-         .. 2 ** (8 * Constants.SIZEOF_tv_usec - 1) - 1;
-   for suseconds_t'Size use 8 * Constants.SIZEOF_tv_usec;
-   pragma Convention (C, suseconds_t);
-
-   type Timeval is record
-      Tv_Sec  : time_t;
-      Tv_Usec : suseconds_t;
-   end record;
-   pragma Convention (C, Timeval);
-
-   type Timeval_Access is access all Timeval;
-   pragma Convention (C, Timeval_Access);
-
-   Immediat : constant Timeval := (0, 0);
-
-   type Int_Access is access all C.int;
-   pragma Convention (C, Int_Access);
-   --  Access to C integers
-
-   type Chars_Ptr_Array is array (C.size_t range <>) of
-     aliased C.Strings.chars_ptr;
-
-   package Chars_Ptr_Pointers is
-      new C.Pointers (C.size_t, C.Strings.chars_ptr, Chars_Ptr_Array,
-                      C.Strings.Null_Ptr);
-   --  Arrays of C (char *)
-
-   type In_Addr is record
-      S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
-   end record;
-   for In_Addr'Alignment use C.int'Alignment;
-   pragma Convention (C, In_Addr);
-   --  IPv4 address, represented as a network-order C.int. Note that the
-   --  underlying operating system may assume that values of this type have
-   --  C.int alignment, so we need to provide a suitable alignment clause here.
-
-   type In_Addr_Access is access all In_Addr;
-   pragma Convention (C, In_Addr_Access);
-   --  Access to internet address
-
-   Inaddr_Any : aliased constant In_Addr := (others => 0);
-   --  Any internet address (all the interfaces)
-
-   type In_Addr_Access_Array is array (C.size_t range <>)
-     of aliased In_Addr_Access;
-   pragma Convention (C, In_Addr_Access_Array);
-
-   package In_Addr_Access_Pointers is
-     new C.Pointers (C.size_t, In_Addr_Access, In_Addr_Access_Array, null);
-   --  Array of internet addresses
-
-   type Sockaddr is record
-      Sa_Family : C.unsigned_short;
-      Sa_Data   : C.char_array (1 .. 14);
-   end record;
-   pragma Convention (C, Sockaddr);
-   --  Socket address
-
-   type Sockaddr_Access is access all Sockaddr;
-   pragma Convention (C, Sockaddr_Access);
-   --  Access to socket address
-
-   type Sockaddr_In is record
-      Sin_Family : C.unsigned_short      := Constants.AF_INET;
-      Sin_Port   : C.unsigned_short      := 0;
-      Sin_Addr   : In_Addr               := Inaddr_Any;
-      Sin_Zero   : C.char_array (1 .. 8) := (others => C.char'Val (0));
-   end record;
-   pragma Convention (C, Sockaddr_In);
-   --  Internet socket address
-
-   type Sockaddr_In_Access is access all Sockaddr_In;
-   pragma Convention (C, Sockaddr_In_Access);
-   --  Access to internet socket address
-
-   procedure Set_Length
-     (Sin : Sockaddr_In_Access;
-      Len : C.int);
-   pragma Inline (Set_Length);
-   --  Set Sin.Sin_Length to Len.
-   --  On this platform, nothing is done as there is no such field.
-
-   procedure Set_Family
-     (Sin    : Sockaddr_In_Access;
-      Family : C.int);
-   pragma Inline (Set_Family);
-   --  Set Sin.Sin_Family to Family
-
-   procedure Set_Port
-     (Sin  : Sockaddr_In_Access;
-      Port : C.unsigned_short);
-   pragma Inline (Set_Port);
-   --  Set Sin.Sin_Port to Port
-
-   procedure Set_Address
-     (Sin     : Sockaddr_In_Access;
-      Address : In_Addr);
-   pragma Inline (Set_Address);
-   --  Set Sin.Sin_Addr to Address
-
-   type Hostent is record
-      H_Name      : C.Strings.chars_ptr;
-      H_Aliases   : Chars_Ptr_Pointers.Pointer;
-      H_Addrtype  : C.short;
-      H_Length    : C.short;
-      H_Addr_List : In_Addr_Access_Pointers.Pointer;
-   end record;
-   pragma Convention (C, Hostent);
-   --  Host entry
-
-   type Hostent_Access is access all Hostent;
-   pragma Convention (C, Hostent_Access);
-   --  Access to host entry
-
-   type Servent is record
-      S_Name    : C.Strings.chars_ptr;
-      S_Aliases : Chars_Ptr_Pointers.Pointer;
-      S_Port    : C.int;
-      S_Proto   : C.Strings.chars_ptr;
-   end record;
-   pragma Convention (C, Servent);
-   --  Service entry
-
-   type Servent_Access is access all Servent;
-   pragma Convention (C, Servent_Access);
-   --  Access to service entry
-
-   type Two_Ints is array (0 .. 1) of C.int;
-   pragma Convention (C, Two_Ints);
-   --  Container for two int values
-
-   subtype Fd_Pair is Two_Ints;
-   --  Two_Ints as used for Create_Signalling_Fds: a pair of connected file
-   --  descriptors, one of which (the "read end" of the connection) being used
-   --  for reading, the other one (the "write end") being used for writing.
-
-   Read_End  : constant := 0;
-   Write_End : constant := 1;
-   --  Indices into an Fd_Pair value providing access to each of the connected
-   --  file descriptors.
-
    --------------------------------
    -- Standard library functions --
    --------------------------------
@@ -382,55 +225,6 @@ package GNAT.Sockets.Thin is
 
    end Signalling_Fds;
 
-   ----------------------------
-   -- Socket sets management --
-   ----------------------------
-
-   procedure Free_Socket_Set
-     (Set : Fd_Set_Access);
-   --  Free system-dependent socket set
-
-   procedure Get_Socket_From_Set
-     (Set    : Fd_Set_Access;
-      Socket : Int_Access;
-      Last   : Int_Access);
-   --  Get last socket in Socket and remove it from the socket set. The
-   --  parameter Last is a maximum value of the largest socket. This hint is
-   --  used to avoid scanning very large socket sets. After a call to
-   --  Get_Socket_From_Set, Last is set back to the real largest socket in the
-   --  socket set.
-
-   procedure Insert_Socket_In_Set
-     (Set    : Fd_Set_Access;
-      Socket : C.int);
-   --  Insert socket in the socket set
-
-   function  Is_Socket_In_Set
-     (Set    : Fd_Set_Access;
-      Socket : C.int) return C.int;
-   --  Check whether Socket is in the socket set, return a non-zero
-   --  value if it is, zero if it is not.
-
-   procedure Last_Socket_In_Set
-     (Set    : Fd_Set_Access;
-      Last   : Int_Access);
-   --  Find the largest socket in the socket set. This is needed for select().
-   --  When Last_Socket_In_Set is called, parameter Last is a maximum value of
-   --  the largest socket. This hint is used to avoid scanning very large
-   --  socket sets. After the call, Last is set back to the real largest socket
-   --  in the socket set.
-
-   function  New_Socket_Set
-     (Set : Fd_Set_Access) return Fd_Set_Access;
-   --  Allocate a new socket set which is a system-dependent structure and
-   --  initialize by copying Set if it is non-null, by making it empty
-   --  otherwise.
-
-   procedure Remove_Socket_From_Set
-     (Set    : Fd_Set_Access;
-      Socket : C.int);
-   --  Remove socket from the socket set
-
    procedure WSACleanup;
 
    procedure Initialize;
@@ -461,12 +255,4 @@ private
    pragma Import (Stdcall, WSAStartup, "WSAStartup");
    pragma Import (Stdcall, WSACleanup, "WSACleanup");
 
-   pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
-   pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
-   pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
-   pragma Import (C, Last_Socket_In_Set, "__gnat_last_socket_in_set");
-   pragma Import (C, New_Socket_Set, "__gnat_new_socket_set");
-   pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
-   pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
-
 end GNAT.Sockets.Thin;
index 0d620c2..f71bb23 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 2001-2007, AdaCore                     --
+--                     Copyright (C) 2001-2008, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -34,6 +34,7 @@
 --  Temporary version for Alpha/VMS
 
 with GNAT.OS_Lib; use GNAT.OS_Lib;
+with GNAT.Sockets.Constants;
 with GNAT.Task_Lock;
 
 with Interfaces.C; use Interfaces.C;
@@ -41,7 +42,7 @@ with Interfaces.C; use Interfaces.C;
 package body GNAT.Sockets.Thin is
 
    Non_Blocking_Sockets : constant Fd_Set_Access :=
-                            New_Socket_Set (No_Socket_Set);
+                            New_Socket_Set (No_Fd_Set_Access);
    --  When this package is initialized with Process_Blocking_IO set
    --  to True, sockets are set in non-blocking mode to avoid blocking
    --  the whole process when a thread wants to perform a blocking IO
@@ -182,15 +183,15 @@ package body GNAT.Sockets.Thin is
          Now  : aliased Timeval;
 
       begin
-         WSet := New_Socket_Set (No_Socket_Set);
+         WSet := New_Socket_Set (No_Fd_Set_Access);
          loop
             Insert_Socket_In_Set (WSet, S);
             Now := Immediat;
             Res := C_Select
               (S + 1,
-               No_Fd_Set,
+               No_Fd_Set_Access,
                WSet,
-               No_Fd_Set,
+               No_Fd_Set_Access,
                Now'Unchecked_Access);
 
             exit when Res > 0;
@@ -208,10 +209,9 @@ package body GNAT.Sockets.Thin is
 
       Res := Syscall_Connect (S, Name, Namelen);
 
-      if Res = Failure
-        and then Errno = Constants.EISCONN
-      then
-         return Thin.Success;
+      if Res = Failure and then Errno = Constants.EISCONN then
+         return Thin_Common.Success;
+
       else
          return Res;
       end if;
@@ -410,35 +410,6 @@ package body GNAT.Sockets.Thin is
       return R;
    end Non_Blocking_Socket;
 
-   -----------------
-   -- Set_Address --
-   -----------------
-
-   procedure Set_Address (Sin : Sockaddr_In_Access; Address : In_Addr) is
-   begin
-      Sin.Sin_Addr   := Address;
-   end Set_Address;
-
-   ----------------
-   -- Set_Family --
-   ----------------
-
-   procedure Set_Family (Sin : Sockaddr_In_Access; Family : C.int) is
-   begin
-      Sin.Sin_Family := C.unsigned_short (Family);
-   end Set_Family;
-
-   ----------------
-   -- Set_Length --
-   ----------------
-
-   procedure Set_Length (Sin : Sockaddr_In_Access; Len : C.int) is
-      pragma Unreferenced (Sin);
-      pragma Unreferenced (Len);
-   begin
-      null;
-   end Set_Length;
-
    -----------------------------
    -- Set_Non_Blocking_Socket --
    -----------------------------
@@ -456,15 +427,6 @@ package body GNAT.Sockets.Thin is
       Task_Lock.Unlock;
    end Set_Non_Blocking_Socket;
 
-   --------------
-   -- Set_Port --
-   --------------
-
-   procedure Set_Port (Sin : Sockaddr_In_Access; Port : C.unsigned_short) is
-   begin
-      Sin.Sin_Port   := Port;
-   end Set_Port;
-
    --------------------
    -- Signalling_Fds --
    --------------------
index b2af2ca..3bcc21b 100644 (file)
 
 --  This is the Alpha/VMS version
 
-with Interfaces.C.Pointers;
 with Interfaces.C.Strings;
 
 with GNAT.OS_Lib;
-with GNAT.Sockets.Constants;
+with GNAT.Sockets.Thin_Common;
 
 with System;
-with System.Aux_DEC;
 
 package GNAT.Sockets.Thin is
 
    --  ??? more comments needed ???
 
-   package C renames Interfaces.C;
-
-   use type C.int;
-   --  This is so we can declare the Failure constant below
+   use Thin_Common;
 
-   Success : constant C.int :=  0;
-   Failure : constant C.int := -1;
+   package C renames Interfaces.C;
 
    function Socket_Errno return Integer renames GNAT.OS_Lib.Errno;
    --  Returns last socket error number
@@ -81,162 +75,6 @@ package GNAT.Sockets.Thin is
 
    end Host_Error_Messages;
 
-   subtype Fd_Set_Access is System.Aux_DEC.Short_Address;
-   No_Fd_Set : constant Fd_Set_Access := System.Null_Address;
-
-   type time_t is
-     range -2 ** (8 * Constants.SIZEOF_tv_sec - 1)
-         .. 2 ** (8 * Constants.SIZEOF_tv_sec - 1) - 1;
-   for time_t'Size use 8 * Constants.SIZEOF_tv_sec;
-   pragma Convention (C, time_t);
-
-   type suseconds_t is
-     range -2 ** (8 * Constants.SIZEOF_tv_usec - 1)
-         .. 2 ** (8 * Constants.SIZEOF_tv_usec - 1) - 1;
-   for suseconds_t'Size use 8 * Constants.SIZEOF_tv_usec;
-   pragma Convention (C, suseconds_t);
-
-   type Timeval is record
-      Tv_Sec  : time_t;
-      Tv_Usec : suseconds_t;
-   end record;
-   pragma Convention (C, Timeval);
-
-   type Timeval_Access is access all Timeval;
-   pragma Convention (C, Timeval_Access);
-
-   Immediat : constant Timeval := (0, 0);
-
-   type Int_Access is access all C.int;
-   pragma Convention (C, Int_Access);
-   --  Access to C integers
-
-   type Chars_Ptr_Array is array (C.size_t range <>) of
-     aliased C.Strings.chars_ptr;
-
-   package Chars_Ptr_Pointers is
-      new C.Pointers (C.size_t, C.Strings.chars_ptr, Chars_Ptr_Array,
-                      C.Strings.Null_Ptr);
-   --  Arrays of C (char *)
-
-   type In_Addr is record
-      S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
-   end record;
-   for In_Addr'Alignment use C.int'Alignment;
-   pragma Convention (C, In_Addr);
-   --  IPv4 address, represented as a network-order C.int. Note that the
-   --  underlying operating system may assume that values of this type have
-   --  C.int alignment, so we need to provide a suitable alignment clause here.
-
-   type In_Addr_Access is access all In_Addr;
-   pragma Convention (C, In_Addr_Access);
-   --  Access to internet address
-
-   Inaddr_Any : aliased constant In_Addr := (others => 0);
-   --  Any internet address (all the interfaces)
-
-   type In_Addr_Access_Array is array (C.size_t range <>)
-     of aliased In_Addr_Access;
-   pragma Convention (C, In_Addr_Access_Array);
-
-   package In_Addr_Access_Pointers is
-     new C.Pointers (C.size_t, In_Addr_Access, In_Addr_Access_Array, null);
-   --  Array of internet addresses
-
-   type Sockaddr is record
-      Sa_Family : C.unsigned_short;
-      Sa_Data   : C.char_array (1 .. 14);
-   end record;
-   pragma Convention (C, Sockaddr);
-   --  Socket address
-
-   type Sockaddr_Access is access all Sockaddr;
-   for Sockaddr_Access'Size use 32;
-   pragma Convention (C, Sockaddr_Access);
-   --  Access to socket address
-
-   type Sockaddr_In is record
-      Sin_Family : C.unsigned_short      := Constants.AF_INET;
-      Sin_Port   : C.unsigned_short      := 0;
-      Sin_Addr   : In_Addr               := Inaddr_Any;
-      Sin_Zero   : C.char_array (1 .. 8) := (others => C.char'Val (0));
-   end record;
-   pragma Convention (C, Sockaddr_In);
-   --  Internet socket address
-
-   type Sockaddr_In_Access is access all Sockaddr_In;
-   for Sockaddr_In_Access'Size use 32;
-   pragma Convention (C, Sockaddr_In_Access);
-   --  Access to internet socket address
-
-   procedure Set_Length
-     (Sin : Sockaddr_In_Access;
-      Len : C.int);
-   pragma Inline (Set_Length);
-   --  Set Sin.Sin_Length to Len.
-   --  On this platform, nothing is done as there is no such field.
-
-   procedure Set_Family
-     (Sin    : Sockaddr_In_Access;
-      Family : C.int);
-   pragma Inline (Set_Family);
-   --  Set Sin.Sin_Family to Family
-
-   procedure Set_Port
-     (Sin  : Sockaddr_In_Access;
-      Port : C.unsigned_short);
-   pragma Inline (Set_Port);
-   --  Set Sin.Sin_Port to Port
-
-   procedure Set_Address
-     (Sin     : Sockaddr_In_Access;
-      Address : In_Addr);
-   pragma Inline (Set_Address);
-   --  Set Sin.Sin_Addr to Address
-
-   type Hostent is record
-      H_Name      : C.Strings.chars_ptr;
-      H_Aliases   : Chars_Ptr_Pointers.Pointer;
-      H_Addrtype  : C.int;
-      H_Length    : C.int;
-      H_Addr_List : In_Addr_Access_Pointers.Pointer;
-   end record;
-   pragma Convention (C, Hostent);
-   --  Host entry
-
-   type Hostent_Access is access all Hostent;
-   for Hostent_Access'Size use 32;
-   pragma Convention (C, Hostent_Access);
-   --  Access to host entry
-
-   type Servent is record
-      S_Name    : C.Strings.chars_ptr;
-      S_Aliases : Chars_Ptr_Pointers.Pointer;
-      S_Port    : C.int;
-      S_Proto   : C.Strings.chars_ptr;
-   end record;
-   pragma Convention (C, Servent);
-   --  Service entry
-
-   type Servent_Access is access all Servent;
-   for Servent_Access'Size use 32;
-   pragma Convention (C, Servent_Access);
-   --  Access to service entry
-
-   type Two_Ints is array (0 .. 1) of C.int;
-   pragma Convention (C, Two_Ints);
-   --  Container for two int values
-
-   subtype Fd_Pair is Two_Ints;
-   --  Two_Ints as used for Create_Signalling_Fds: a pair of connected file
-   --  descriptors, one of which (the "read end" of the connection) being used
-   --  for reading, the other one (the "write end") being used for writing.
-
-   Read_End  : constant := 0;
-   Write_End : constant := 1;
-   --  Indices into an Fd_Pair value providing access to each of the connected
-   --  file descriptors.
-
    --------------------------------
    -- Standard library functions --
    --------------------------------
@@ -386,55 +224,6 @@ package GNAT.Sockets.Thin is
 
    end Signalling_Fds;
 
-   ----------------------------
-   -- Socket sets management --
-   ----------------------------
-
-   procedure Free_Socket_Set
-     (Set : Fd_Set_Access);
-   --  Free system-dependent socket set
-
-   procedure Get_Socket_From_Set
-     (Set    : Fd_Set_Access;
-      Socket : Int_Access;
-      Last   : Int_Access);
-   --  Get last socket in Socket and remove it from the socket set. The
-   --  parameter Last is a maximum value of the largest socket. This hint is
-   --  used to avoid scanning very large socket sets. After a call to
-   --  Get_Socket_From_Set, Last is set back to the real largest socket in the
-   --  socket set.
-
-   procedure Insert_Socket_In_Set
-     (Set    : Fd_Set_Access;
-      Socket : C.int);
-   --  Insert socket in the socket set
-
-   function  Is_Socket_In_Set
-     (Set    : Fd_Set_Access;
-      Socket : C.int) return C.int;
-   --  Check whether Socket is in the socket set, return a non-zero
-   --  value if it is, zero if it is not.
-
-   procedure Last_Socket_In_Set
-     (Set    : Fd_Set_Access;
-      Last   : Int_Access);
-   --  Find the largest socket in the socket set. This is needed for select().
-   --  When Last_Socket_In_Set is called, parameter Last is a maximum value of
-   --  the largest socket. This hint is used to avoid scanning very large
-   --  socket sets. After the call, Last is set back to the real largest socket
-   --  in the socket set.
-
-   function  New_Socket_Set
-     (Set : Fd_Set_Access) return Fd_Set_Access;
-   --  Allocate a new socket set which is a system-dependent structure and
-   --  initialize by copying Set if it is non-null, by making it empty
-   --  otherwise.
-
-   procedure Remove_Socket_From_Set
-     (Set    : Fd_Set_Access;
-      Socket : C.int);
-   --  Remove socket from the socket set
-
    -------------------------------------------
    -- Nonreentrant network databases access --
    -------------------------------------------
@@ -474,14 +263,6 @@ private
    pragma Import (C, C_Strerror,      "DECC$STRERROR");
    pragma Import (C, C_System,        "DECC$SYSTEM");
 
-   pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
-   pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
-   pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
-   pragma Import (C, Last_Socket_In_Set, "__gnat_last_socket_in_set");
-   pragma Import (C, New_Socket_Set, "__gnat_new_socket_set");
-   pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
-   pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
-
    pragma Import (C, Nonreentrant_Gethostbyname, "DECC$GETHOSTBYNAME");
    pragma Import (C, Nonreentrant_Gethostbyaddr, "DECC$GETHOSTBYADDR");
    pragma Import (C, Nonreentrant_Getservbyname, "DECC$GETSERVBYNAME");
index 681ea86..0077e27 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 2002-2007, AdaCore                     --
+--                     Copyright (C) 2002-2008, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -38,6 +38,7 @@
 --  This version is for VxWorks
 
 with GNAT.OS_Lib;  use GNAT.OS_Lib;
+with GNAT.Sockets.Constants;
 with GNAT.Task_Lock;
 
 with Interfaces.C; use Interfaces.C;
@@ -45,7 +46,7 @@ with Interfaces.C; use Interfaces.C;
 package body GNAT.Sockets.Thin is
 
    Non_Blocking_Sockets : constant Fd_Set_Access :=
-                            New_Socket_Set (No_Socket_Set);
+                            New_Socket_Set (No_Fd_Set_Access);
    --  When this package is initialized with Process_Blocking_IO set
    --  to True, sockets are set in non-blocking mode to avoid blocking
    --  the whole process when a thread wants to perform a blocking IO
@@ -195,16 +196,16 @@ package body GNAT.Sockets.Thin is
          Now  : aliased Timeval;
 
       begin
-         WSet := New_Socket_Set (No_Socket_Set);
+         WSet := New_Socket_Set (No_Fd_Set_Access);
 
          loop
             Insert_Socket_In_Set (WSet, S);
             Now := Immediat;
             Res := C_Select
               (S + 1,
-               No_Fd_Set,
+               No_Fd_Set_Access,
                WSet,
-               No_Fd_Set,
+               No_Fd_Set_Access,
                Now'Unchecked_Access);
 
             exit when Res > 0;
@@ -225,7 +226,7 @@ package body GNAT.Sockets.Thin is
       if Res = Failure
         and then Errno = Constants.EISCONN
       then
-         return Thin.Success;
+         return Thin_Common.Success;
       else
          return Res;
       end if;
@@ -425,42 +426,6 @@ package body GNAT.Sockets.Thin is
       return R;
    end Non_Blocking_Socket;
 
-   -----------------
-   -- Set_Address --
-   -----------------
-
-   procedure Set_Address
-     (Sin     : Sockaddr_In_Access;
-      Address : In_Addr)
-   is
-   begin
-      Sin.Sin_Addr := Address;
-   end Set_Address;
-
-   ----------------
-   -- Set_Family --
-   ----------------
-
-   procedure Set_Family
-     (Sin    : Sockaddr_In_Access;
-      Family : C.int)
-   is
-   begin
-      Sin.Sin_Family := C.unsigned_char (Family);
-   end Set_Family;
-
-   ----------------
-   -- Set_Length --
-   ----------------
-
-   procedure Set_Length
-     (Sin : Sockaddr_In_Access;
-      Len : C.int)
-   is
-   begin
-      Sin.Sin_Length := C.unsigned_char (Len);
-   end Set_Length;
-
    -----------------------------
    -- Set_Non_Blocking_Socket --
    -----------------------------
@@ -477,18 +442,6 @@ package body GNAT.Sockets.Thin is
       Task_Lock.Unlock;
    end Set_Non_Blocking_Socket;
 
-   --------------
-   -- Set_Port --
-   --------------
-
-   procedure Set_Port
-     (Sin  : Sockaddr_In_Access;
-      Port : C.unsigned_short)
-   is
-   begin
-      Sin.Sin_Port   := Port;
-   end Set_Port;
-
    --------------------
    -- Signalling_Fds --
    --------------------
index 6ea18f6..19642aa 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 2001-2007, AdaCore                     --
+--                     Copyright (C) 2001-2008, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -38,6 +38,7 @@
 --  This is the default version
 
 with GNAT.OS_Lib; use GNAT.OS_Lib;
+with GNAT.Sockets.Constants;
 with GNAT.Task_Lock;
 
 with Interfaces.C; use Interfaces.C;
@@ -45,7 +46,7 @@ with Interfaces.C; use Interfaces.C;
 package body GNAT.Sockets.Thin is
 
    Non_Blocking_Sockets : constant Fd_Set_Access :=
-                            New_Socket_Set (No_Socket_Set);
+                            New_Socket_Set (No_Fd_Set_Access);
    --  When this package is initialized with Process_Blocking_IO set
    --  to True, sockets are set in non-blocking mode to avoid blocking
    --  the whole process when a thread wants to perform a blocking IO
@@ -199,15 +200,15 @@ package body GNAT.Sockets.Thin is
          Now  : aliased Timeval;
 
       begin
-         WSet := New_Socket_Set (No_Socket_Set);
+         WSet := New_Socket_Set (No_Fd_Set_Access);
          loop
             Insert_Socket_In_Set (WSet, S);
             Now := Immediat;
             Res := C_Select
               (S + 1,
-               No_Fd_Set,
+               No_Fd_Set_Access,
                WSet,
-               No_Fd_Set,
+               No_Fd_Set_Access,
                Now'Unchecked_Access);
 
             exit when Res > 0;
@@ -228,7 +229,7 @@ package body GNAT.Sockets.Thin is
       if Res = Failure
         and then Errno = Constants.EISCONN
       then
-         return Thin.Success;
+         return Thin_Common.Success;
       else
          return Res;
       end if;
@@ -427,45 +428,6 @@ package body GNAT.Sockets.Thin is
       return R;
    end Non_Blocking_Socket;
 
-   -----------------
-   -- Set_Address --
-   -----------------
-
-   procedure Set_Address
-     (Sin     : Sockaddr_In_Access;
-      Address : In_Addr)
-   is
-   begin
-      Sin.Sin_Addr := Address;
-   end Set_Address;
-
-   ----------------
-   -- Set_Family --
-   ----------------
-
-   procedure Set_Family
-     (Sin    : Sockaddr_In_Access;
-      Family : C.int)
-   is
-   begin
-      Sin.Sin_Family := C.unsigned_short (Family);
-   end Set_Family;
-
-   ----------------
-   -- Set_Length --
-   ----------------
-
-   procedure Set_Length
-     (Sin : Sockaddr_In_Access;
-      Len : C.int)
-   is
-      pragma Unreferenced (Sin);
-      pragma Unreferenced (Len);
-
-   begin
-      null;
-   end Set_Length;
-
    -----------------------------
    -- Set_Non_Blocking_Socket --
    -----------------------------
@@ -483,18 +445,6 @@ package body GNAT.Sockets.Thin is
       Task_Lock.Unlock;
    end Set_Non_Blocking_Socket;
 
-   --------------
-   -- Set_Port --
-   --------------
-
-   procedure Set_Port
-     (Sin  : Sockaddr_In_Access;
-      Port : C.unsigned_short)
-   is
-   begin
-      Sin.Sin_Port   := Port;
-   end Set_Port;
-
    --------------------
    -- Signalling_Fds --
    --------------------
index 59e9004..01e4d81 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---                     Copyright (C) 2001-2007, AdaCore                     --
+--                     Copyright (C) 2001-2008, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
 
 --  This is the default version
 
-with Interfaces.C.Pointers;
 with Interfaces.C.Strings;
 
 with GNAT.OS_Lib;
-with GNAT.Sockets.Constants;
+with GNAT.Sockets.Thin_Common;
 
 with System;
 
@@ -51,13 +50,9 @@ package GNAT.Sockets.Thin is
    --  standard interface. It will be used as a default for all the platforms
    --  that do not have a specific version of this file.
 
-   package C renames Interfaces.C;
-
-   use type C.int;
-   --  This is so we can declare the Failure constant below
+   use Thin_Common;
 
-   Success : constant C.int :=  0;
-   Failure : constant C.int := -1;
+   package C renames Interfaces.C;
 
    function Socket_Errno return Integer renames GNAT.OS_Lib.Errno;
    --  Returns last socket error number
@@ -79,158 +74,6 @@ package GNAT.Sockets.Thin is
 
    end Host_Error_Messages;
 
-   subtype Fd_Set_Access is System.Address;
-   No_Fd_Set : constant Fd_Set_Access := System.Null_Address;
-
-   type time_t is
-     range -2 ** (8 * Constants.SIZEOF_tv_sec - 1)
-         .. 2 ** (8 * Constants.SIZEOF_tv_sec - 1) - 1;
-   for time_t'Size use 8 * Constants.SIZEOF_tv_sec;
-   pragma Convention (C, time_t);
-
-   type suseconds_t is
-     range -2 ** (8 * Constants.SIZEOF_tv_usec - 1)
-         .. 2 ** (8 * Constants.SIZEOF_tv_usec - 1) - 1;
-   for suseconds_t'Size use 8 * Constants.SIZEOF_tv_usec;
-   pragma Convention (C, suseconds_t);
-
-   type Timeval is record
-      Tv_Sec  : time_t;
-      Tv_Usec : suseconds_t;
-   end record;
-   pragma Convention (C, Timeval);
-
-   type Timeval_Access is access all Timeval;
-   pragma Convention (C, Timeval_Access);
-
-   Immediat : constant Timeval := (0, 0);
-
-   type Int_Access is access all C.int;
-   pragma Convention (C, Int_Access);
-   --  Access to C integers
-
-   type Chars_Ptr_Array is array (C.size_t range <>) of
-     aliased C.Strings.chars_ptr;
-
-   package Chars_Ptr_Pointers is
-      new C.Pointers (C.size_t, C.Strings.chars_ptr, Chars_Ptr_Array,
-                      C.Strings.Null_Ptr);
-   --  Arrays of C (char *)
-
-   type In_Addr is record
-      S_B1, S_B2, S_B3, S_B4 : C.unsigned_char;
-   end record;
-   for In_Addr'Alignment use C.int'Alignment;
-   pragma Convention (C, In_Addr);
-   --  IPv4 address, represented as a network-order C.int. Note that the
-   --  underlying operating system may assume that values of this type have
-   --  C.int alignment, so we need to provide a suitable alignment clause here.
-
-   type In_Addr_Access is access all In_Addr;
-   pragma Convention (C, In_Addr_Access);
-   --  Access to internet address
-
-   Inaddr_Any : aliased constant In_Addr := (others => 0);
-   --  Any internet address (all the interfaces)
-
-   type In_Addr_Access_Array is array (C.size_t range <>)
-     of aliased In_Addr_Access;
-   pragma Convention (C, In_Addr_Access_Array);
-
-   package In_Addr_Access_Pointers is
-     new C.Pointers (C.size_t, In_Addr_Access, In_Addr_Access_Array, null);
-   --  Array of internet addresses
-
-   type Sockaddr is record
-      Sa_Family : C.unsigned_short;
-      Sa_Data   : C.char_array (1 .. 14);
-   end record;
-   pragma Convention (C, Sockaddr);
-   --  Socket address
-
-   type Sockaddr_Access is access all Sockaddr;
-   pragma Convention (C, Sockaddr_Access);
-   --  Access to socket address
-
-   type Sockaddr_In is record
-      Sin_Family : C.unsigned_short      := Constants.AF_INET;
-      Sin_Port   : C.unsigned_short      := 0;
-      Sin_Addr   : In_Addr               := Inaddr_Any;
-      Sin_Zero   : C.char_array (1 .. 8) := (others => C.char'Val (0));
-   end record;
-   pragma Convention (C, Sockaddr_In);
-   --  Internet socket address
-
-   type Sockaddr_In_Access is access all Sockaddr_In;
-   pragma Convention (C, Sockaddr_In_Access);
-   --  Access to internet socket address
-
-   procedure Set_Length
-     (Sin : Sockaddr_In_Access;
-      Len : C.int);
-   pragma Inline (Set_Length);
-   --  Set Sin.Sin_Length to Len.
-   --  On this platform, nothing is done as there is no such field.
-
-   procedure Set_Family
-     (Sin    : Sockaddr_In_Access;
-      Family : C.int);
-   pragma Inline (Set_Family);
-   --  Set Sin.Sin_Family to Family
-
-   procedure Set_Port
-     (Sin  : Sockaddr_In_Access;
-      Port : C.unsigned_short);
-   pragma Inline (Set_Port);
-   --  Set Sin.Sin_Port to Port
-
-   procedure Set_Address
-     (Sin     : Sockaddr_In_Access;
-      Address : In_Addr);
-   pragma Inline (Set_Address);
-   --  Set Sin.Sin_Addr to Address
-
-   type Hostent is record
-      H_Name      : C.Strings.chars_ptr;
-      H_Aliases   : Chars_Ptr_Pointers.Pointer;
-      H_Addrtype  : C.int;
-      H_Length    : C.int;
-      H_Addr_List : In_Addr_Access_Pointers.Pointer;
-   end record;
-   pragma Convention (C, Hostent);
-   --  Host entry
-
-   type Hostent_Access is access all Hostent;
-   pragma Convention (C, Hostent_Access);
-   --  Access to host entry
-
-   type Servent is record
-      S_Name    : C.Strings.chars_ptr;
-      S_Aliases : Chars_Ptr_Pointers.Pointer;
-      S_Port    : C.int;
-      S_Proto   : C.Strings.chars_ptr;
-   end record;
-   pragma Convention (C, Servent);
-   --  Service entry
-
-   type Servent_Access is access all Servent;
-   pragma Convention (C, Servent_Access);
-   --  Access to service entry
-
-   type Two_Ints is array (0 .. 1) of C.int;
-   pragma Convention (C, Two_Ints);
-   --  Container for two int values
-
-   subtype Fd_Pair is Two_Ints;
-   --  Two_Ints as used for Create_Signalling_Fds: a pair of connected file
-   --  descriptors, one of which (the "read end" of the connection) being used
-   --  for reading, the other one (the "write end") being used for writing.
-
-   Read_End  : constant := 0;
-   Write_End : constant := 1;
-   --  Indices into an Fd_Pair value providing access to each of the connected
-   --  file descriptors.
-
    --------------------------------
    -- Standard library functions --
    --------------------------------
@@ -380,55 +223,6 @@ package GNAT.Sockets.Thin is
 
    end Signalling_Fds;
 
-   ----------------------------
-   -- Socket sets management --
-   ----------------------------
-
-   procedure Free_Socket_Set
-     (Set : Fd_Set_Access);
-   --  Free system-dependent socket set
-
-   procedure Get_Socket_From_Set
-     (Set    : Fd_Set_Access;
-      Socket : Int_Access;
-      Last   : Int_Access);
-   --  Get last socket in Socket and remove it from the socket set. The
-   --  parameter Last is a maximum value of the largest socket. This hint is
-   --  used to avoid scanning very large socket sets. After a call to
-   --  Get_Socket_From_Set, Last is set back to the real largest socket in the
-   --  socket set.
-
-   procedure Insert_Socket_In_Set
-     (Set    : Fd_Set_Access;
-      Socket : C.int);
-   --  Insert socket in the socket set
-
-   function  Is_Socket_In_Set
-     (Set    : Fd_Set_Access;
-      Socket : C.int) return C.int;
-   --  Check whether Socket is in the socket set, return a non-zero
-   --  value if it is, zero if it is not.
-
-   procedure Last_Socket_In_Set
-     (Set    : Fd_Set_Access;
-      Last   : Int_Access);
-   --  Find the largest socket in the socket set. This is needed for select().
-   --  When Last_Socket_In_Set is called, parameter Last is a maximum value of
-   --  the largest socket. This hint is used to avoid scanning very large
-   --  socket sets. After the call, Last is set back to the real largest socket
-   --  in the socket set.
-
-   function  New_Socket_Set
-     (Set : Fd_Set_Access) return Fd_Set_Access;
-   --  Allocate a new socket set which is a system-dependent structure and
-   --  initialize by copying Set if it is non-null, by making it empty
-   --  otherwise.
-
-   procedure Remove_Socket_From_Set
-     (Set    : Fd_Set_Access;
-      Socket : C.int);
-   --  Remove socket from the socket set
-
    -------------------------------------------
    -- Nonreentrant network databases access --
    -------------------------------------------
@@ -473,14 +267,6 @@ private
    pragma Import (C, C_System, "system");
    pragma Import (C, C_Writev, "writev");
 
-   pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
-   pragma Import (C, Get_Socket_From_Set, "__gnat_get_socket_from_set");
-   pragma Import (C, Is_Socket_In_Set, "__gnat_is_socket_in_set");
-   pragma Import (C, Last_Socket_In_Set, "__gnat_last_socket_in_set");
-   pragma Import (C, New_Socket_Set, "__gnat_new_socket_set");
-   pragma Import (C, Insert_Socket_In_Set, "__gnat_insert_socket_in_set");
-   pragma Import (C, Remove_Socket_From_Set, "__gnat_remove_socket_from_set");
-
    pragma Import (C, Nonreentrant_Gethostbyname, "gethostbyname");
    pragma Import (C, Nonreentrant_Gethostbyaddr, "gethostbyaddr");
    pragma Import (C, Nonreentrant_Getservbyname, "getservbyname");
index 5fcaa00..44bf2d8 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 2001-2007, AdaCore                     --
+--                     Copyright (C) 2001-2008, AdaCore                     --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -90,15 +90,14 @@ package body Signalling_Fds is
 
          --  Bind the socket to an available port on localhost
 
-         Len := Sin'Size / 8;
-         Set_Length (Sin'Unchecked_Access, Len);
-         Sin.Sin_Family    := Constants.AF_INET;
+         Set_Family (Sin.Sin_Family, Family_Inet);
          Sin.Sin_Addr.S_B1 := 127;
          Sin.Sin_Addr.S_B2 := 0;
          Sin.Sin_Addr.S_B3 := 0;
          Sin.Sin_Addr.S_B4 := 1;
          Sin.Sin_Port      := 0;
 
+         Len := C.int (Lengths (Family_Inet));
          Res := C_Bind (L_Sock, Sin'Address, Len);
 
          if Res = Failure then
@@ -143,7 +142,7 @@ package body Signalling_Fds is
          --  marked "in use", even though it has been closed (perhaps by some
          --  other process that has already exited). This causes the above
          --  C_Connect to fail with EADDRINUSE. In this case, we close the
-         --  ports, and loop back to try again. This mysterious windows
+         --  ports, and loop back to try again. This mysterious Windows
          --  behavior is documented. See, for example:
          --    http://msdn2.microsoft.com/en-us/library/ms737625.aspx
          --  In an experiment with 2000 calls, 21 required exactly one retry, 7
@@ -186,7 +185,7 @@ package body Signalling_Fds is
 
       Fds.all := (Read_End => R_Sock, Write_End => W_Sock);
 
-      return Success;
+      return Thin_Common.Success;
 
    <<Fail>>
       declare
index 9dbe0ea..7f14255 100644 (file)
@@ -6,7 +6,7 @@
 --                                                                          --
 --                                 B o d y                                  --
 --                                                                          --
---                     Copyright (C) 2007, AdaCore                          --
+--                  Copyright (C) 2007-2008, AdaCore                        --
 --                                                                          --
 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
 -- terms of the  GNU General Public License as published  by the Free Soft- --
@@ -34,7 +34,9 @@
 --  This version is used on VxWorks. Note that the corresponding spec is in
 --  g-sttsne-locking.ads.
 
+with Ada.Unchecked_Conversion;
 with Interfaces.C; use Interfaces.C;
+with GNAT.Sockets.Constants;
 
 package body GNAT.Sockets.Thin.Task_Safe_NetDB is
 
index 0d0a037..6262965 100644 (file)
 
 #include "gsocket.h"
 
+typedef enum { NUM, TXT } kind_t;
+
 struct line {
   char *text;
   char *value;
   char *comment;
+  kind_t kind;
   struct line *next;
 };
 
 struct line *first = NULL, *last = NULL;
 
-#define TXT(_text) add_line(_text, NULL, NULL);
+#define TXT(_text) add_line(_text, NULL, NULL, TXT);
 /* Plain text */
 
 #define _NL TXT("")
@@ -69,13 +72,13 @@ struct line *first = NULL, *last = NULL;
 #define itoad(n) f_itoa ("%d", (n))
 #define itoax(n) f_itoa ("16#%08x#", (n))
 
-#define CND(name,comment) add_line(#name, itoad (name), comment);
+#define CND(name,comment) add_line(#name, itoad (name), comment, NUM);
 /* Constant (decimal) */
 
-#define CNX(name,comment) add_line(#name, itoax (name), comment);
+#define CNX(name,comment) add_line(#name, itoax (name), comment, NUM);
 /* Constant (hexadecimal) */
 
-#define CN_(name,comment) add_line(#name, name, comment);
+#define CN_(name,comment) add_line(#name, name, comment, TXT);
 /* Constant (generic) */
 
 #define STR(p) STR1(p)
@@ -87,7 +90,7 @@ void output (void);
 char *f_itoa (char *, int);
 /* int to string */
 
-void add_line (char *, char*, char*);
+void add_line (char *, char*, char*, kind_t);
 
 #ifdef __MINGW32__
 unsigned int _CRT_fmode = _O_BINARY;
@@ -137,6 +140,7 @@ TXT("--  This is the version for " TARGET)
 TXT("--  This file is generated automatically, do not modify it by hand! Instead,")
 TXT("--  make changes to gen-soccon.c and re-run it on each target.")
 _NL
+TXT("with Interfaces.C;")
 TXT("package GNAT.Sockets.Constants is")
 _NL
 TXT("   --------------")
@@ -145,12 +149,14 @@ TXT("   --------------")
 _NL
 
 #ifndef AF_INET
-#define AF_INET -1
+# define AF_INET -1
 #endif
 CND(AF_INET, "IPv4 address family")
 
 #ifndef AF_INET6
-#define AF_INET6 -1
+# define AF_INET6 -1
+#else
+# define HAVE_AF_INET6 1
 #endif
 CND(AF_INET6, "IPv6 address family")
 _NL
@@ -604,7 +610,34 @@ CND(SIZEOF_tv_sec, "tv_sec")
 #define SIZEOF_tv_usec (sizeof tv.tv_usec)
 CND(SIZEOF_tv_usec, "tv_usec")
 }
-
+_NL
+TXT("   --  Sizes of protocol specific address types (for sockaddr.sa_len)")
+_NL
+#define SIZEOF_sockaddr_in (sizeof (struct sockaddr_in))
+CND(SIZEOF_sockaddr_in, "struct sockaddr_in")
+#ifdef HAVE_AF_INET6
+# define SIZEOF_sockaddr_in6 (sizeof (struct sockaddr_in6))
+#else
+# define SIZEOF_sockaddr_in6 0
+#endif
+CND(SIZEOF_sockaddr_in6, "struct sockaddr_in6")
+_NL
+TXT("   --  Size of file descriptor sets")
+_NL
+#define SIZEOF_fd_set (sizeof (fd_set))
+CND(SIZEOF_fd_set, "fd_set");
+_NL
+TXT("   --  Fields of struct hostent")
+_NL
+#ifdef __MINGW32__
+# define h_addrtype_t "short"
+# define h_length_t   "short"
+#else
+# define h_addrtype_t "int"
+# define h_length_t   "int"
+#endif
+TXT("   subtype H_Addrtype_T is Interfaces.C." h_addrtype_t ";")
+TXT("   subtype H_Length_T   is Interfaces.C." h_length_t ";")
 _NL
 TXT("   ----------------------------------------")
 TXT("   -- Properties of supported interfaces --")
@@ -612,6 +645,10 @@ TXT("   ----------------------------------------")
 _NL
 
 CND(Need_Netdb_Buffer, "Need buffer for Netdb ops")
+CND(Has_Sockaddr_Len,  "Sockaddr has sa_len field")
+_NL
+TXT("   Thread_Blocking_IO : constant Boolean := True;")
+TXT("   --  Set False for contexts where socket i/o are process blocking")
 
 #ifdef __vxworks
 _NL
@@ -641,18 +678,9 @@ CND(WSASYSNOTREADY,     "System not ready")
 CND(WSAVERNOTSUPPORTED, "Version not supported")
 CND(WSANOTINITIALISED,  "Winsock not initialized")
 CND(WSAEDISCON,         "Disconnected")
-
 #endif
 
 _NL
-TXT("   ----------------------")
-TXT("   -- Additional flags --")
-TXT("   ----------------------")
-_NL
-TXT("   Thread_Blocking_IO : constant Boolean := True;")
-TXT("   --  Set False for contexts where socket i/o are process blocking")
-
-_NL
 TXT("end GNAT.Sockets.Constants;")
 
   output ();
@@ -672,7 +700,8 @@ output (void) {
   for (p = first; p != NULL; p = p->next) {
     if (p->value != NULL) {
       UPD_MAX(text);
-      UPD_MAX(value);
+      if (p->kind == NUM)
+        UPD_MAX(value);
     }
   }
   sprintf (fmt, "   %%-%ds : constant := %%%ds;%%s%%s\n",
@@ -700,13 +729,15 @@ f_itoa (char *fmt, int n) {
 }
 
 void
-add_line (char *_text, char *_value, char *_comment) {
+add_line (char *_text, char *_value, char *_comment, kind_t _kind) {
   struct line *l = (struct line *) malloc (sizeof (struct line));
 
-  l->text = _text;
-  l->value = _value;
+  l->text    = _text;
+  l->value   = _value;
   l->comment = _comment;
-  l->next = NULL;
+  l->kind    = _kind;
+  l->next    = NULL;
+
   if (last == NULL)
     first = last = l;
   else {
index ce4d478..8b8c838 100644 (file)
 #else
 # define Need_Netdb_Buffer 0
 #endif
+
+#if defined (__FreeBSD__) || defined (__vxworks)
+# define Has_Sockaddr_Len 1
+#else
+# define Has_Sockaddr_Len 0
+#endif