diff options
author | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-27 12:27:16 +0000 |
---|---|---|
committer | charlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-10-27 12:27:16 +0000 |
commit | ec21a388fcbb2ad6dffac00ab8b1d38fca07f203 (patch) | |
tree | 9b4f8b09d35bcb15d0b087c6989f50b3771498c7 /gcc/ada/g-socket.adb | |
parent | 4532026e1544522881bff89e6308fe50020310b6 (diff) | |
download | gcc-ec21a388fcbb2ad6dffac00ab8b1d38fca07f203.tar.gz |
2004-10-26 Vincent Celier <celier@gnat.com>
Thomas Quinot <quinot@act-europe.fr>
* g-socthi-vms.adb, g-socthi-mingw.adb, g-socthi-vxworks.ads:
(C_Writev): Change MSG_Forced_Flags to Constants.MSG_Forced_Flags as
there is no use of GNAT.Sockets.Constants.
Remove remaining pragma Import for C_Write
Remove C_Read and C_Write from internal implementation unit
GNAT.Sockets.Thin, as their usage for sockets is non-portable (using
the read and write functions from the system runtime library is fine
on UNIX but won't work under Windows).
* g-socket.adb: (Abort_Selector): Use C_Send instead of C_Write.
(Check_Selector): Use C_Recv instead of C_Read.
Selectors are the GNAT.Sockets abstraction to perform a select()
call on a set of descriptors. To allow abortion of an ongoing
select operation, some data is written to a dedicated socket that
is always monitored.
Under Windows, the write and read library functions cannot operate
on sockets, so we need to use send and recv instead, which is portable
across all supported platforms.
* g-socthi.ads: Remove C_Read and C_Write from internal implementation
unit GNAT.Sockets.Thin, as their usage for sockets is non-portable
(using the read and write functions from the system runtime library is
fine on UNIX but won't work under Windows).
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@89638 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/g-socket.adb')
-rw-r--r-- | gcc/ada/g-socket.adb | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/gcc/ada/g-socket.adb b/gcc/ada/g-socket.adb index 01f9d19bb93..ab2ed6e8ae1 100644 --- a/gcc/ada/g-socket.adb +++ b/gcc/ada/g-socket.adb @@ -226,14 +226,17 @@ package body GNAT.Sockets is -------------------- 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; ------------------- @@ -440,8 +443,13 @@ package body GNAT.Sockets is 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; |