--------------------
procedure Abort_Selector (Selector : Selector_Type) is
- Buf : aliased Character := ASCII.NUL;
- Discard : C.int;
- pragma Unreferenced (Discard);
+ Buf : aliased Character := ASCII.NUL;
+ Res : C.int;
begin
-- Send an empty array to unblock C select system call
- Discard := C_Write (C.int (Selector.W_Sig_Socket), Buf'Address, 1);
+ Res := C_Send (C.int (Selector.W_Sig_Socket), Buf'Address, 1,
+ Constants.MSG_Forced_Flags);
+ if Res = Failure then
+ Raise_Socket_Error (Socket_Errno);
+ end if;
end Abort_Selector;
-------------------
declare
Buf : Character;
+
begin
- Res := C_Read (C.int (Selector.R_Sig_Socket), Buf'Address, 1);
+ Res := C_Recv (C.int (Selector.R_Sig_Socket), Buf'Address, 1, 0);
+
+ if Res = Failure then
+ Raise_Socket_Error (Socket_Errno);
+ end if;
end;
Status := Aborted;
-- POSIX compatitibility, copy write fd set into exception fd
-- set. Once select() returns, check any socket present in the
-- exception fd set and peek at incoming out-of-band data. If
- -- the test is not successfull and if the socket is present in
+ -- the test is not successful, and the socket is present in
-- the initial write fd set, then move the socket from the
-- exception fd set to the write fd set.
begin
for J in Iovec'Range loop
- Res := C_Read
+ Res := C_Recv
(Fd,
Iovec (J).Base.all'Address,
- Interfaces.C.int (Iovec (J).Length));
+ Interfaces.C.int (Iovec (J).Length),
+ 0);
if Res < 0 then
return Res;
begin
for J in Iovec'Range loop
- Res := C_Write
+ Res := C_Send
(Fd,
Iovec (J).Base.all'Address,
- Interfaces.C.int (Iovec (J).Length));
+ Interfaces.C.int (Iovec (J).Length),
+ Constants.MSG_Forced_Flags);
if Res < 0 then
return Res;
function C_Listen (S, Backlog : C.int) return C.int;
- function C_Read
- (Fd : C.int;
- Buf : System.Address;
- Count : C.int)
- return C.int;
-
function C_Readv
(Fd : C.int;
Iov : System.Address;
(Command : System.Address)
return C.int;
- function C_Write
- (Fd : C.int;
- Buf : System.Address;
- Count : C.int)
- return C.int;
-
function C_Writev
(Fd : C.int;
Iov : System.Address;
pragma Import (C, C_Getsockopt, "getsockopt");
pragma Import (C, C_Inet_Addr, "inet_addr");
pragma Import (C, C_Listen, "listen");
- pragma Import (C, C_Read, "read");
pragma Import (C, C_Readv, "readv");
pragma Import (C, C_Select, "select");
pragma Import (C, C_Setsockopt, "setsockopt");
pragma Import (C, C_Shutdown, "shutdown");
pragma Import (C, C_Strerror, "strerror");
pragma Import (C, C_System, "system");
- pragma Import (C, C_Write, "write");
pragma Import (C, C_Writev, "writev");
pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");
(S : C.int;
Backlog : C.int) return C.int;
- function C_Read
- (Fd : C.int;
- Buf : System.Address;
- Count : C.int) return C.int;
-
function C_Readv
(Fd : C.int;
Iov : System.Address;
function C_System
(Command : System.Address) return C.int;
- function C_Write
- (Fd : C.int;
- Buf : System.Address;
- Count : C.int) return C.int;
-
function C_Writev
(Fd : C.int;
Iov : System.Address;
pragma Import (C, C_Getsockopt, "getsockopt");
pragma Import (C, C_Inet_Addr, "inet_addr");
pragma Import (C, C_Listen, "listen");
- pragma Import (C, C_Read, "read");
pragma Import (C, C_Readv, "readv");
pragma Import (C, C_Select, "select");
pragma Import (C, C_Setsockopt, "setsockopt");
pragma Import (C, C_Shutdown, "shutdown");
pragma Import (C, C_Strerror, "strerror");
pragma Import (C, C_System, "system");
- pragma Import (C, C_Write, "write");
pragma Import (C, C_Writev, "writev");
pragma Import (C, Free_Socket_Set, "__gnat_free_socket_set");