Implement wait on set of sockets to become ready to perform I/O
operations.  Current implementation of the similar functionality with
type Selector_Type and Check_Selector routine in GNAT.Sockets package is
limited by 1024 sockets. New implementation limited only by process
limit on number of open files. On OS where poll system call is not
available, the wait is implemented on top of select system call without
limit on size of sockets set.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

        * Makefile.rtl (GNATRTL_SOCKETS_OBJS): New object
        g-socpol$(objext) New source files noted: g-socpol.adb,
        g-socpol.ads, g-socpol__dummy.adb, g-socpol__dummy.ads,
        g-sopowa.adb, g-sopowa__posix.adb, g-sopowa__mingw.adb,
        g-spogwa.adb, g-spogwa.ads.
        * impunit.adb (Non_Imp_File_Names_95): New base filename
        g-socpol in "GNAT Library Units" section for GNAT.Sockets.Poll
        unit.
        * libgnat/g-socket.ads, libgnat/g-socket.adb:
        (Raise_Socket_Error): Moved from body to private part of
        specification to use in GNAT.Sockets.Poll.
        * libgnat/g-socpol.ads, libgnat/g-socpol.adb: Main unit of the
        implementation.
        * libgnat/g-socpol__dummy.ads, libgnat/g-socpol__dummy.adb:
        Empty unit for the systems without sockets support.
        * libgnat/g-spogwa.ads, libgnat/g-spogwa.adb: Generic unit
        implementing sockets poll on top of select system call.
        * libgnat/g-sopowa.adb (Wait): Separate implementation for
        operation systems with poll system call support.
        * libgnat/g-sopowa__posix.adb (Wait): Separate implementation
        for POSIX select system call.
        * libgnat/g-sopowa__mingw.adb (Wait): Separate implementation
        for Windows select system call.
        * gsocket.h (_WIN32_WINNT): Increase to 0x0600 for winsock2.h to
        allow WSAPoll related definitions.
        * s-oscons-tmplt.c: Fix comment next to #endif for
        #if defined (__linux__) || defined (__ANDROID__) line.  Include
        <poll.h> for all except VxWorks and Windows.
        (SIZEOF_nfds_t): New definition.
        (SIZEOF_fd_type): New definition.
        (SIZEOF_pollfd_events): New definition.
        (POLLIN, POLLPRI, POLLOUT, POLLERR, POLLHUP, POLLNVAL): New
        definitions for VxWorks to be able to emulate poll on top of
        select in it.  Define POLLPRI as zero on Windows as it is not
        supported there.
        (Poll_Linkname): New definition, because the poll system call
        has different name in Windows and POSIX.

Attachment: patch.diff.gz
Description: application/gzip

Reply via email to