g-socket$(objext) \
g-socthi$(objext) \
g-soliop$(objext) \
+ g-sothco$(objext) \
g-souinf$(objext) \
g-speche$(objext) \
g-spchge$(objext) \
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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 --
-- 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;
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- --
-- 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 --
-- 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
-- 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 --
-- 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 --
-- 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;
-- --
-- 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 --
-- 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
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;
package body GNAT.Sockets is
+ package C renames Interfaces.C;
+
use type C.int;
Finalized : Boolean := False;
-- 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,
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
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);
(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.
+
---------
-- "+" --
---------
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 --
---------------
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,
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;
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,
end if;
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 --
--------------------
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;
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
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;
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 --
-----------------
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,
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
-- 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)),
with Ada.Streams;
with Ada.Unchecked_Deallocation;
-with System;
-
package GNAT.Sockets is
-- Sockets are designed to provide a consistent communication facility
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
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;
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
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
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.
-- 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
-- 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);
-- 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
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;
-- 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
-- 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;
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;
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;
-- --
-- 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;
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;
-- 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
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;
-- 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);
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;
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 --
--------------------
-- --
-- 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
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 --
--------------------------------
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;
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;
-- --
-- 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- --
-- 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;
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
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;
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;
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 --
-----------------------------
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 --
--------------------
-- 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
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 --
--------------------------------
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 --
-------------------------------------------
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");
-- --
-- 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- --
-- 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;
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
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;
if Res = Failure
and then Errno = Constants.EISCONN
then
- return Thin.Success;
+ return Thin_Common.Success;
else
return Res;
end if;
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 --
-----------------------------
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 --
--------------------
-- --
-- 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- --
-- 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;
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
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;
if Res = Failure
and then Errno = Constants.EISCONN
then
- return Thin.Success;
+ return Thin_Common.Success;
else
return Res;
end if;
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 --
-----------------------------
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 --
--------------------
-- --
-- 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;
-- 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
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 --
--------------------------------
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 --
-------------------------------------------
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");
-- --
-- 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- --
-- 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
-- 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
Fds.all := (Read_End => R_Sock, Write_End => W_Sock);
- return Success;
+ return Thin_Common.Success;
<<Fail>>
declare
-- --
-- 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- --
-- 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
#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("")
#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)
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;
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(" --------------")
_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
#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 --")
_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
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;")
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",
}
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 {
#else
# define Need_Netdb_Buffer 0
#endif
+
+#if defined (__FreeBSD__) || defined (__vxworks)
+# define Has_Sockaddr_Len 1
+#else
+# define Has_Sockaddr_Len 0
+#endif