mirror of
https://github.com/danieleteti/delphimvcframework.git
synced 2024-11-16 00:05:53 +01:00
115 lines
4.2 KiB
ObjectPascal
115 lines
4.2 KiB
ObjectPascal
{******************************************************************************}
|
|
{ }
|
|
{ Delphi cross platform socket library }
|
|
{ }
|
|
{ Copyright (c) 2017 WiNDDRiVER(soulawing@gmail.com) }
|
|
{ }
|
|
{ Homepage: https://github.com/winddriver/Delphi-Cross-Socket }
|
|
{ }
|
|
{******************************************************************************}
|
|
unit BSD.kqueue;
|
|
|
|
interface
|
|
|
|
uses
|
|
Posix.Base, Posix.Time;
|
|
|
|
const
|
|
EVFILT_READ = -1;
|
|
EVFILT_WRITE = -2;
|
|
EVFILT_AIO = -3; { attached to aio requests }
|
|
EVFILT_VNODE = -4; { attached to vnodes }
|
|
EVFILT_PROC = -5; { attached to struct proc }
|
|
EVFILT_SIGNAL = -6; { attached to struct proc }
|
|
EVFILT_TIMER = -7; { timers }
|
|
EVFILT_NETDEV = -8; { network devices }
|
|
EVFILT_FS = -9; { filesystem events }
|
|
|
|
EVFILT_SYSCOUNT = 9;
|
|
|
|
EV_ADD = $0001; { add event to kq }
|
|
EV_DELETE = $0002; { delete event from kq }
|
|
EV_ENABLE = $0004; { enable event }
|
|
EV_DISABLE = $0008; { disable event (not reported) }
|
|
|
|
{ flags }
|
|
EV_ONESHOT = $0010; { only report one occurrence }
|
|
EV_CLEAR = $0020; { clear event state after reporting }
|
|
EV_RECEIPT = $0040; { force EV_ERROR on success, data=0 }
|
|
EV_DISPATCH = $0080; { disable event after reporting }
|
|
EV_SYSFLAGS = $F000; { reserved by system }
|
|
EV_FLAG1 = $2000; { filter-specific flag }
|
|
|
|
{ returned values }
|
|
EV_EOF = $8000; { EOF detected }
|
|
EV_ERROR = $4000; { error, data contains errno }
|
|
|
|
{ data/hint flags for EVFILT_READ|WRITE, shared with userspace }
|
|
NOTE_LOWAT = $0001; { low water mark }
|
|
|
|
{ data/hint flags for EVFILT_VNODE, shared with userspace }
|
|
NOTE_DELETE = $0001; { vnode was removed }
|
|
NOTE_WRITE = $0002; { data contents changed }
|
|
NOTE_EXTEND = $0004; { size increased }
|
|
NOTE_ATTRIB = $0008; { attributes changed }
|
|
NOTE_LINK = $0010; { link count changed }
|
|
NOTE_RENAME = $0020; { vnode was renamed }
|
|
NOTE_REVOKE = $0040; { vnode access was revoked }
|
|
|
|
{ data/hint flags for EVFILT_PROC, shared with userspace }
|
|
NOTE_EXIT = $80000000; { process exited }
|
|
NOTE_FORK = $40000000; { process forked }
|
|
NOTE_EXEC = $20000000; { process exec'd }
|
|
NOTE_PCTRLMASK = $f0000000; { mask for hint bits }
|
|
NOTE_PDATAMASK = $000fffff; { mask for pid }
|
|
|
|
{ additional flags for EVFILT_PROC }
|
|
NOTE_TRACK = $00000001; { follow across forks }
|
|
NOTE_TRACKERR = $00000002; { could not track child }
|
|
NOTE_CHILD = $00000004; { am a child process }
|
|
|
|
{ data/hint flags for EVFILT_NETDEV, shared with userspace }
|
|
NOTE_LINKUP = $0001; { link is up }
|
|
NOTE_LINKDOWN = $0002; { link is down }
|
|
NOTE_LINKINV = $0004; { link state is invalid }
|
|
|
|
type
|
|
PKEvent = ^TKEvent;
|
|
TKEvent = record
|
|
Ident : UIntPtr; { identifier for this event }
|
|
Filter : SmallInt; { filter for event }
|
|
Flags : Word;
|
|
FFlags : Cardinal;
|
|
Data : IntPtr;
|
|
uData : Pointer; { opaque user data identifier }
|
|
end;
|
|
|
|
function kqueue: Integer; cdecl;
|
|
external libc name _PU + 'kqueue';
|
|
{$EXTERNALSYM kqueue}
|
|
|
|
function kevent(kq: Integer; ChangeList: PKEvent; nChanged: Integer;
|
|
EventList: PKevent; nEvents: Integer; Timeout: PTimeSpec): Integer; cdecl;
|
|
external libc name _PU + 'kevent';
|
|
{$EXTERNALSYM kevent}
|
|
|
|
procedure EV_SET(kevp: PKEvent; const aIdent: UIntPtr; const aFilter: SmallInt;
|
|
const aFlags: Word; const aFFlags: Cardinal; const aData: IntPtr;
|
|
const auData: Pointer); inline;
|
|
|
|
implementation
|
|
|
|
procedure EV_SET(kevp: PKEvent; const aIdent: UIntPtr; const aFilter: SmallInt;
|
|
const aFlags: Word; const aFFlags: Cardinal; const aData: IntPtr;
|
|
const auData: Pointer); inline;
|
|
begin
|
|
kevp^.Ident := aIdent;
|
|
kevp^.Filter := aFilter;
|
|
kevp^.Flags := aFlags;
|
|
kevp^.FFlags := aFFlags;
|
|
kevp^.Data := aData;
|
|
kevp^.uData := auData;
|
|
end;
|
|
|
|
end.
|