-- --
-- S p e c --
-- --
--- Copyright (C) 2001-2011, AdaCore --
+-- Copyright (C) 2001-2014, 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- --
-- feature, so it is not available if Multicast is not supported, or not
-- installed.
--- The VMS implementation was implemented using the DECC RTL Socket API,
--- and is thus subject to limitations in the implementation of this API.
-
-- VxWorks cross ports fully implement this package
-- This package is not yet implemented on LynxOS or other cross ports
-- Channel : Stream_Access;
-- begin
- -- accept Start;
- --
-- -- Get an Internet address of a host (here the local host name).
-- -- Note that a host can have several addresses. Here we get
-- -- the first one which is supposed to be the official one.
-- -- represents the server side of the connection. Server remains
-- -- available to receive further connections.
+ -- accept Start;
+
-- Accept_Socket (Server, Socket, Address);
-- -- Return a stream associated to the connected socket
-- Socket_Level,
-- (Reuse_Address, True));
- -- -- Force Pong to block
+ -- -- Force Ping to block
-- delay 0.2;
end case;
end record;
- -- A request flag allows to specify the type of message transmissions or
- -- receptions. A request flag can be combination of zero or more
+ -- A request flag allows specification of the type of message transmissions
+ -- or receptions. A request flag can be combination of zero or more
-- predefined request flags.
type Request_Flag_Type is private;
type Vector_Element is record
Base : Stream_Element_Reference;
- Length : Ada.Streams.Stream_Element_Count;
+ Length : Interfaces.C.size_t;
end record;
type Vector_Type is array (Integer range <>) of Vector_Element;
-- connections, creates a new connected socket with mostly the same
-- properties as Server, and allocates a new socket. The returned Address
-- is filled in with the address of the connection. Raises Socket_Error on
- -- error.
+ -- error. Note: if Server is a non-blocking socket, whether or not this
+ -- aspect is inherited by Socket is platform-dependent.
procedure Accept_Socket
(Server : Socket_Type;
-- whether the operation completed successfully, 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.
+ -- by this procedure and destroyed before it returns. If Timeout is 0.0,
+ -- no attempt is made to detect whether the connection has succeeded; it
+ -- is up to the user to determine this using Check_Selector later on.
procedure Control_Socket
(Socket : Socket_Type;
-- Item'First - 1 when the socket has been closed by peer. This is not
-- an error, and no exception is raised in this case unless Item'First
-- is Stream_Element_Offset'First, in which case Constraint_Error is
- -- raised. Flags allows to control the reception. Raise Socket_Error on
+ -- raised. Flags allows control of the reception. Raise Socket_Error on
-- error.
procedure Receive_Socket
-- Receive message from Socket. If Socket is not connection-oriented, the
-- source address From of the message is filled in. Last is the index
-- value such that Item (Last) is the last character assigned. Flags
- -- allows to control the reception. Raises Socket_Error on error.
+ -- allows control of the reception. Raises Socket_Error on error.
procedure Receive_Vector
(Socket : Socket_Type;
Last : out Ada.Streams.Stream_Element_Offset;
Flags : Request_Flag_Type := No_Request_Flag);
-- Transmit a message over a socket. Upon return, Last is set to the index
- -- within Item of the last element transmitted. Flags allows to control
+ -- within Item of the last element transmitted. Flags allows control of
-- the transmission. Raises Socket_Error on any detected error condition.
procedure Send_Socket
To : Sock_Addr_Type;
Flags : Request_Flag_Type := No_Request_Flag);
-- Transmit a message over a datagram socket. The destination address is
- -- To. Flags allows to control the transmission. Raises Socket_Error on
+ -- To. Flags allows control of the transmission. Raises Socket_Error on
-- error.
procedure Send_Vector
-- socket. Count is set to the count of transmitted stream elements. Flags
-- allow control over transmission.
+ procedure Set_Close_On_Exec
+ (Socket : Socket_Type;
+ Close_On_Exec : Boolean;
+ Status : out Boolean);
+ -- When Close_On_Exec is True, mark Socket to be closed automatically when
+ -- a new program is executed by the calling process (i.e. prevent Socket
+ -- from being inherited by child processes). When Close_On_Exec is False,
+ -- mark Socket to not be closed on exec (i.e. allow it to be inherited).
+ -- Status is False if the operation could not be performed, or is not
+ -- supported on the target platform.
+
procedure Set_Socket_Option
(Socket : Socket_Type;
Level : Level_Type := Socket_Level;
-- subprogram when the stream is not needed anymore.
type Socket_Set_Type is limited private;
- -- This type allows to manipulate sets of sockets. It allows to wait for
- -- events on multiple endpoints at one time. This type has default
+ -- This type allows manipulation of sets of sockets. It allows waiting
+ -- for events on multiple endpoints at one time. This type has default
-- initialization, and the default value is the empty set.
--
-- Note: This type used to contain a pointer to dynamically allocated
-- Check_Selector provides the very same behaviour. The only difference is
-- that it does not watch for exception events. Note that on some platforms
-- it is kept process blocking on purpose. The timeout parameter allows the
- -- user to have the behaviour he wants. Abort_Selector allows to safely
- -- abort a blocked Check_Selector call. A special socket is opened by
+ -- user to have the behaviour he wants. Abort_Selector allows the safe
+ -- abort of a blocked Check_Selector call. A special socket is opened by
-- Create_Selector and included in each call to Check_Selector.
--
-- Abort_Selector causes an event to occur on this descriptor in order to