Add the Epoll interface
This commit is contained in:
parent
655a6fa4e7
commit
1d94bae327
|
@ -0,0 +1,80 @@
|
|||
|
||||
with Interfaces.C,
|
||||
System;
|
||||
|
||||
package Async.Raw.Epoll is
|
||||
|
||||
subtype Epoll_Fd_Type is Integer;
|
||||
|
||||
subtype Epoll_Events_Type is Interfaces.Unsigned_32;
|
||||
EPOLLIN : constant Epoll_Events_Type := 1;
|
||||
EPOLLPRI : constant Epoll_Events_Type := 2;
|
||||
EPOLLOUT : constant Epoll_Events_Type := 4;
|
||||
EPOLLRDNORM : constant Epoll_Events_Type := 64;
|
||||
EPOLLRDBAND : constant Epoll_Events_Type := 128;
|
||||
EPOLLWRNORM : constant Epoll_Events_Type := 256;
|
||||
EPOLLWRBAND : constant Epoll_Events_Type := 512;
|
||||
EPOLLMSG : constant Epoll_Events_Type := 1024;
|
||||
EPOLLERR : constant Epoll_Events_Type := 8;
|
||||
EPOLLHUP : constant Epoll_Events_Type := 16;
|
||||
EPOLLRDHUP : constant Epoll_Events_Type := 8192;
|
||||
EPOLLEXCLUSIVE : constant Epoll_Events_Type := 268435456;
|
||||
EPOLLWAKEUP : constant Epoll_Events_Type := 536870912;
|
||||
EPOLLONESHOT : constant Epoll_Events_Type := 1073741824;
|
||||
EPOLLET : constant Epoll_Events_Type := 2147483648;
|
||||
|
||||
type Epoll_Ctl_Type is (Epoll_Ctl_Add,
|
||||
Epoll_Ctl_Del,
|
||||
Epoll_Ctl_Mod);
|
||||
for Epoll_Ctl_Type use (Epoll_Ctl_Add => 1,
|
||||
Epoll_Ctl_Del => 2,
|
||||
Epoll_Ctl_Mod => 3);
|
||||
|
||||
type Data_Type (Discriminant : Interfaces.C.unsigned := 0) is record
|
||||
case Discriminant is
|
||||
when 0 =>
|
||||
Ptr : System.Address;
|
||||
when 1 =>
|
||||
FD : Epoll_Fd_Type;
|
||||
when 2 =>
|
||||
U32 : Interfaces.Unsigned_32;
|
||||
when others =>
|
||||
U64 : Interfaces.Unsigned_64;
|
||||
end case;
|
||||
end record
|
||||
with Unchecked_Union,
|
||||
Convention => C;
|
||||
|
||||
|
||||
type Event_Type is record
|
||||
Events : Interfaces.Unsigned_32;
|
||||
Data : Data_Type;
|
||||
end record
|
||||
with Convention => C,
|
||||
Pack;
|
||||
|
||||
type Event_Array_Type is array (Integer range <>) of aliased Event_Type
|
||||
with Convention => C;
|
||||
|
||||
function Create (Size : Integer) return Epoll_Fd_Type
|
||||
with Import,
|
||||
Link_Name => "epoll_create",
|
||||
Convention => C;
|
||||
|
||||
function Control (Epfd : Epoll_Fd_Type;
|
||||
Op : Epoll_Ctl_Type;
|
||||
Fd : Epoll_Fd_Type;
|
||||
Events : access Event_Type) return Integer
|
||||
with Import,
|
||||
Link_Name => "epoll_ctl",
|
||||
Convention => C;
|
||||
|
||||
function Wait (Epfd : Epoll_Fd_Type;
|
||||
Events : Event_Array_Type;
|
||||
Max_Events : Integer;
|
||||
Timeout : Integer) return Integer
|
||||
with Import,
|
||||
Link_Name => "epoll_wait",
|
||||
Convention => C;
|
||||
|
||||
end Async.Raw.Epoll;
|
|
@ -0,0 +1,2 @@
|
|||
package Async.Raw is
|
||||
end Async.Raw;
|
|
@ -1,5 +1,2 @@
|
|||
package Async is
|
||||
|
||||
|
||||
|
||||
end Async;
|
||||
end Async;
|
||||
|
|
Loading…
Reference in New Issue