!!      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ None :NoneF_/ posix-apiGet the current working directory without using the system locale to convert it to text. This is implemented with a safe FFI call since it may block.None"$'-.;FHMadk  posix-apiThe fd field of  struct pollfd posix-apiThe events field of  struct pollfd posix-apiThe revents field of  struct pollfd  posix-apiThe POLLIN event.  posix-apiThe POLLOUT event.  posix-apiThe POLLERR event.  posix-apiThe POLLHUP event.  posix-apiThe POLLNVAL event. posix-api6Is the first argument a subset of the second argument?  Safe None "$'.;FHMdXW& posix-api,An address for a UNIX domain socket. The  Ehttp://pubs.opengroup.org/onlinepubs/009604499/basedefs/sys/un.h.htmlPOSIX specification mandates two fields: Tsa_family_t sun_family Address family. char sun_path[] Socket pathname. 7However, the first field is omitted since it is always AF_UNIX1. It is adding during serialization. Although sun_path! is a null-terminated string, SocketAddressUnixB should not have a trailing null byte. The conversion function encodeSocketAddressUnixl adds the null terminator. The size of path should not equal or exceed the platform-dependent size of sun_path. posix-api4An address for an Internet socket over IPv4. The  Ihttp://pubs.opengroup.org/onlinepubs/000095399/basedefs/netinet/in.h.htmlPOSIX specification mandates three fields: usa_family_t sin_family AF_INET in_port_t sin_port Port number struct in_addr sin_addr IP addressThis type omits the first field since is a constant that is only relevant for serialization purposes. The spec also mandates that sin_port and sin_addr_ be in network byte order, so keep in mind that these values are not immidiately useable. posix-apiThe  option_value data. posix-apiThe sockaddr data. This is an extensible tagged union, so this library has chosen to represent it as byte array. It is up to platform-specific libraries to inhabit this type with values. The byte array backing this may be unpinned or pinned. posix-apiReceive flags are given by MessageFlags Receive and send flags are given by MessageFlags Send|. This is done because there are several flags that are applicable in either a receiving context or a sending context. posix-apiiThe direction of a message. The data constructor are only used at the type level as phantom arguments. posix-api$Which end of the socket to shutdown.! posix-apiOptions used in the  option_name argument in  getsockopt or  setsockopt. ( posix-api!A socket type. The spec mandates  SOCK_STREAM,  SOCK_DGRAM , and SOCK_SEQPACKET:. Other types may be available on a per-platform basis.* posix-apiXA socket communications domain, sometimes referred to as a family. The spec mandates AF_UNIX,  AF_UNSPEC, and AF_INET., posix-apiThe  SOCK_STREAM socket type.- posix-apiThe  SOCK_DGRAM socket type.. posix-apiThe SOCK_RAW socket type. POSIX declares raw sockets optional. However, they are included here for convenience. Please open an issue if this prevents this library from compiling on a POSIX-compliant operating system that anyone uses for haskell development. Keep in mind that even though raw sockets may exist on all POSIX-compliant operating systems, they may differ in their behavior./ posix-apiThe SOCK_SEQPACKET socket type.0 posix-apiThe AF_UNIX communications domain.1 posix-apiThe  AF_UNSPEC communications domain.2 posix-apiThe AF_INET communications domain.3 posix-apiThe AF_INET6 communications domain. POSIX declares raw sockets optional. However, they are included here for convenience. Please open an issue if this prevents this library from compiling on a POSIX-compliant operating system that anyone uses for haskell development.4 posix-apiThe MSG_OOB receive flag or send flag.5 posix-apiThe MSG_PEEK receive flag.6 posix-apiThe  MSG_WAITALL receive flag.7 posix-apiThe  MSG_NOSIGNAL send flag.8 posix-api'The default protocol for a socket type.9 posix-apiThe  IPPROTO_RAW protocol.: posix-apiThe  IPPROTO_ICMP protocol.; posix-apiThe  IPPROTO_TCP protocol.< posix-apiThe  IPPROTO_UDP protocol.= posix-apiThe  IPPROTO_IP protocol.> posix-apiThe  IPPROTO_IPV6 protocol.? posix-api)Disable further receive operations (e.g. SHUT_RD)@ posix-api&Disable further send operations (e.g. SHUT_WR)A posix-api&Disable further send operations (e.g.  SHUT_RDWR)B posix-apiSocket error status (e.g.  SOL_SOCKET)C posix-apiSocket error status (e.g. SO_ERROR)D posix-api6Transmission of broadcast messages is supported (e.g.  SO_BROADCAST)G posix-apiThe size of a serialized msghdr.H posix-apiThe size of a serialized iovec. posix-api$The index and read functions ignore  sin_family . The write functions will set  sin_family to AF_INET.T !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU None "$;FMXdkV posix-api3The size of a serialized internet socket address. W posix-api<Serialize a IPv4 socket address so that it may be passed to bind6. This serialization is operating-system dependent.X posix-api Decode a  sockaddr_in from a sockaddrD of an unknown family. This returns nothing when the size of the sockaddr is wrong or when the  sin_family is not AF_INET.Y posix-api5This is unsafe, but it is needed for the wrappers of recvmmsg. The index uses  sockaddr_ins as elements, not bytes. The caller of this function is responsible for bounds checks. Returns the actual (non-internet) socket family on a failure to parse.Z posix-apiCSerialize a unix domain socket address so that it may be passed to bind}. This serialization is operating-system dependent. If the path provided by the argument equals or exceeds the size of sun_path (typically in the range 92 to 108 but varies by platform), the socket address will instead be given the empty string as its path. This typically results in bind returning an error code. posix-apiBuffer, must have length of  sockaddr_inVWXYZNone "$'.FHX_d-[ posix-apijCreate an endpoint for communication, returning a file descriptor that refers to that endpoint. The  Ehttp://pubs.opengroup.org/onlinepubs/9699919799/functions/socket.htmlPOSIX specification includes more details. No special preparation is required before calling this function. The author believes that it cannot block for a prolonged period of time.\ posix-apiCreate an unbound pair of connected sockets in a specified domain, of a specified type, under the protocol optionally specified by the protocol argument. The  Ihttp://pubs.opengroup.org/onlinepubs/9699919799/functions/socketpair.htmlPOSIX specification includes more details. No special preparation is required before calling this function. The author believes that it cannot block for a prolonged period of time.] posix-apiAssign a local socket address address to a socket identified by descriptor socket that has no local socket address assigned. The  Chttp://pubs.opengroup.org/onlinepubs/9699919799/functions/bind.htmlPOSIX specification includes more details. The  represents the sockaddr( pointer argument, together with its  socklen_t$ size, as a byte array. This allows bind to be used with sockaddr extensions on various platforms. No special preparation is required before calling this function. The author believes that it cannot block for a prolonged period of time.^ posix-api|Mark the socket as a passive socket, that is, as a socket that will be used to accept incoming connection requests using accept . The  Ehttp://pubs.opengroup.org/onlinepubs/9699919799/functions/listen.htmlPOSIX specification includes more details. No special preparation is required before calling this function. The author believes that it cannot block for a prolonged period of time._ posix-api;Connect the socket to the specified socket address. The  Fhttp://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.htmlPOSIX specification includes more details.` posix-api;Connect the socket to the specified socket address. The  Fhttp://pubs.opengroup.org/onlinepubs/9699919799/functions/connect.htmlPOSIX specificationp includes more details. The only sensible way to use this is to give a nonblocking socket as the argument.a posix-apiIExtract the first connection on the queue of pending connections. The  Ehttp://pubs.opengroup.org/onlinepubs/9699919799/functions/accept.htmlPOSIX specification[ includes more details. This function's type differs slightly from the specification: [int accept(int socket, struct sockaddr *restrict address, socklen_t *restrict address_len);uInstead of requiring the caller to prepare buffers through which information is returned, this haskell binding to accept prepares those buffers internally. This eschews C's characteristic buffer-passing in favor of the Haskell convention of allocating internally and returning.JMore specifically, this binding lacks an argument corresponding to the sockaddrE buffer from the specification. That mutable buffer is allocated internally, resized and frozen upon a success, and returned along with the file descriptor of the accepted socket. The size of this buffer is determined by the second argument (maximum socket address size). This size argument is also writen to the  address_lenp buffer, which is also allocated internally. The size returned through this pointer is used to resize the sockaddr6 buffer, which is then frozen so that an immutable  is returned to the end user.8For applications uninterested in the peer (described by sockaddr ), POSIX accept. allows the null pointer to be passed as both address and  address_len. This behavior is provided by c.b posix-apiSee a. This uses the unsafe FFI. Consequently, it does not not need to allocate pinned memory. It only makes sense to call this on a nonblocking socket.c posix-api A variant of a* that does not provide the user with a  detailing the peer.d posix-api@Retrieve the locally-bound name of the specified socket. The  Ehttp://pubs.opengroup.org/onlinepubs/9699919799/functions/accept.htmlPOSIX specification of  getsockname includes more details.e posix-api3Retrieve the value for the option specified by the Option- argument for the socket specified by the  argument. The  Ihttp://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockopt.htmlPOSIX specification of  getsockopt includes more details.f posix-api.Set the value for the option specified by the Option- argument for the socket specified by the  argument. The  Ihttp://pubs.opengroup.org/onlinepubs/9699919799/functions/getsockopt.htmlPOSIX specification of  getsockoptF includes more details. This variant requires that the size of the  option_value be the same as the size of . That is, the  option_name must describe an option that is represented by a C integer. This is a common case, so we avoid allocations by reference-passing in C.g posix-api Send data from a byte array over a network socket. Users may specify an offset and a length to send fewer bytes than are actually present in the array. Since this uses the safe FFI, it allocates a pinned copy of the bytearry if it was not already pinned.h posix-apiWrite data from multiple byte arrays to the file/socket associated with the file descriptor. This does not support slicing. The  Dhttp://pubs.opengroup.org/onlinepubs/009604499/functions/writev.htmlPOSIX specification of writev includes more details. posix-api6Copy and pin a byte array if, it's not already pinned.i posix-apiaSend two payloads (one from unmanaged memory and one from managed memory) over a network socket.j posix-apiaSend two payloads (one from managed memory and one from unmanaged memory) over a network socket.k posix-api%Send many immutable byte arrays with sendmsgd. This accepts a slice into the chunks. Additionally, this accepts an offset into the first chunk.l posix-apiSend data from a mutable byte array over a network socket. Users may specify an offset and a length to send fewer bytes than are actually present in the array. Since this uses the safe FFI, it allocates a pinned copy of the bytearry if it was not already pinned.m posix-apiSend data from an address over a network socket. This is not guaranteed to send the entire length. This uses the safe FFI since it may block indefinitely.n posix-apiSend data from an address over a network socket. This uses the unsafe FFI. Users of this function should be sure to set flags that prohibit this from blocking. On Linux this is accomplished with  O_NONBLOCK#. It is often desirable to call threadWaitWrite+ on a nonblocking socket before calling  unsafeSend on it.o posix-apimSend data from a byte array over a network socket. This uses the unsafe FFI; considerations pertaining to  sendUnsafe} apply to this function as well. Users may specify a length to send fewer bytes than are actually present in the array.p posix-apiuSend data from a mutable byte array over a network socket. This uses the unsafe FFI; considerations pertaining to  sendUnsafe apply to this function as well. Users specify an offset and a length to send fewer bytes than are actually present in the array.q posix-apizSend data from a byte array over an unconnected network socket. This uses the unsafe FFI; considerations pertaining to  sendToUnsafe apply to this function as well. The offset and length arguments cause a slice of the byte array to be sent rather than the entire byte array.r posix-api Variant of q that requires that  sockaddr_in be used as the socket address. This is used to avoid allocating a buffer for the socket address when the caller knows in advance that they are sending to an IPv4 address.s posix-api Variant of q that requires that  sockaddr_in be used as the socket address. This is used to avoid allocating a buffer for the socket address when the caller knows in advance that they are sending to an IPv4 address.t posix-api|Send data from a mutable byte array over an unconnected network socket. This uses the unsafe FFI; concerns pertaining to n apply to this function as well. The offset and length arguments cause a slice of the mutable byte array to be sent rather than the entire byte array.u posix-api Variant of t that requires that  sockaddr_in be used as the socket address. This is used to avoid allocating a buffer for the socket address when the caller knows in advance that they are sending to an IPv4 address.v posix-api?Receive data into an address from a network socket. This wraps recv using the safe FFI. When the returned size is zero, there are no additional bytes to receive and the peer has performed an orderly shutdown.w posix-apiAReceive data into a byte array from a network socket. This wraps recv using the safe FFI. When the returned size is zero, there are no additional bytes to receive and the peer has performed an orderly shutdown.x posix-api?Receive data into an address from a network socket. This wraps recv using the unsafe FFI. Users of this function should be sure to set flags that prohibit this from blocking. On Linux this is accomplished by setting the  MSG_DONTWAIT! flag and handling the resulting EAGAIN or  EWOULDBLOCK}. When the returned size is zero, there are no additional bytes to receive and the peer has performed an orderly shutdown.y posix-apinReceive data into an address from a network socket. This uses the unsafe FFI; considerations pertaining to  receiveUnsafe apply to this function as well. Users may specify a length to receive fewer bytes than are actually present in the mutable byte array.z posix-apiReceive data into an address from an unconnected network socket. This uses the unsafe FFI. Users may specify an offset into the destination byte array. This function does not resize the buffer.} posix-apiReceive data into an address from a network socket. This uses the unsafe FFI. This does not return the socket address of the remote host that sent the packet received.~ posix-apiReceive data into an address from a network socket. This uses the unsafe FFI. This does not return the socket address of the remote host that sent the packet received. posix-apiReceive a message, scattering the input. This does not provide the socket address or the control messages. All of the chunks must have the same maximum size. All resulting byte arrays have been explicitly pinned. posix-apiReceive a message, scattering the input. This provides the socket address but does not include control messages. All of the chunks must have the same maximum size. All resulting byte arrays have been explicitly pinned. posix-apiClose a socket. The  Chttp://pubs.opengroup.org/onlinepubs/009696899/functions/close.htmlPOSIX specification2 includes more details. This uses the safe FFI. posix-api>Close a socket. This uses the unsafe FFI. According to the  Chttp://pubs.opengroup.org/onlinepubs/009696899/functions/close.htmlPOSIX specification , "If fildes refers to a socket, close()Y shall cause the socket to be destroyed. If the socket is in connection-mode, and the  SO_LINGERk option is set for the socket with non-zero linger time, and the socket has untransmitted data, then close()U shall block for up to the current linger interval until all data is transmitted." posix-apiClose a socket with the unsafe FFI. Do not check for errors. It is only appropriate to use this when a socket is being closed to handle an exceptional case. Since the user will want the propogate the original exception, the exception provided by g would just be discarded. This function allows us to potentially avoid an additional FFI call to . posix-api,Shutdown a socket. This uses the unsafe FFI. posix-api<Convert a 16-bit word from host to network byte order (e.g. htons). posix-api<Convert a 16-bit word from network to host byte order (e.g. ntohs). posix-api<Convert a 32-bit word from host to network byte order (e.g. htonl). posix-api<Convert a 32-bit word from network to host byte order (e.g. ntohl).)[ posix-apiCommunications domain (e.g. internet, unix) posix-apiSocket type (e.g. datagram, stream ) with flags posix-apiProtocol\ posix-api Communications domain (probably unix) posix-apiSocket type (e.g. datagram, stream ) with flags posix-apiProtocol] posix-apiSocket posix-api'Socket address, extensible tagged union^ posix-apiSocket posix-apiBacklog_ posix-apiFd posix-api'Socket address, extensible tagged union` posix-apiFd posix-api'Socket address, extensible tagged uniona posix-apiListening socket posix-apiMaximum socket address size posix-api%Peer information and connected socketb posix-apiListening socket posix-apiMaximum socket address size posix-api%Peer information and connected socketc posix-apiListening socket posix-apiConnected socketd posix-apiSocket posix-apiMaximum socket address sizee posix-apiSocket posix-api Socket level posix-apiMaximum option value sizef posix-apiSocket posix-api Socket level posix-api Option name posix-api Option valueg posix-apiSocket posix-apiSource byte array posix-apiOffset into source array posix-apiLength in bytes posix-apiFlags posix-api%Number of bytes pushed to send bufferh posix-apiSocket posix-apiSource byte arraysi posix-apiSocket posix-apiSource address (payload A) posix-apiLength in bytes (payload A) posix-apiSource and offset (payload B) posix-apiLength in bytes (payload B) posix-apiFlags posix-api%Number of bytes pushed to send bufferj posix-apiSocket posix-apiSource and offset (payload B) posix-apiLength in bytes (payload B) posix-apiSource address (payload A) posix-apiLength in bytes (payload A) posix-apiFlags posix-api%Number of bytes pushed to send bufferk posix-apiSocket posix-api Byte arrays posix-apiOffset into byte array chunks posix-apiNumber of chunks to send posix-apiOffset into first chunkl posix-apiSocket posix-apiSource byte array posix-apiOffset into source array posix-apiLength in bytes posix-apiFlags posix-api%Number of bytes pushed to send bufferm posix-apiConnected socket posix-apiSource address posix-apiLength in bytes posix-apiFlags posix-api%Number of bytes pushed to send buffern posix-apiSocket posix-apiSource address posix-apiLength in bytes posix-apiFlags posix-api%Number of bytes pushed to send buffero posix-apiSocket posix-apiSource byte array posix-apiOffset into source array posix-apiLength in bytes posix-apiFlags posix-api%Number of bytes pushed to send bufferp posix-apiSocket posix-apiSource mutable byte array posix-apiOffset into source array posix-apiLength in bytes posix-apiFlags posix-api%Number of bytes pushed to send bufferq posix-apiSocket posix-apiSource byte array posix-apiOffset into source array posix-apiLength in bytes posix-apiFlags posix-apiSocket Address posix-api%Number of bytes pushed to send bufferr posix-apiSocket posix-apiSource byte array posix-apiOffset into source array posix-apiLength in bytes posix-apiFlags posix-apiSocket Address posix-api%Number of bytes pushed to send buffers posix-apiSocket posix-apiSource byte array posix-apiLength in bytes posix-apiFlags posix-apiSocket Address posix-api%Number of bytes pushed to send buffert posix-apiSocket posix-apiSource byte array posix-apiOffset into source array posix-apiLength in bytes posix-apiFlags posix-apiSocket Address posix-api%Number of bytes pushed to send bufferu posix-apiSocket posix-apiSource byte array posix-apiOffset into source array posix-apiLength in bytes posix-apiFlags posix-apiSocket Address posix-api%Number of bytes pushed to send bufferv posix-apiSocket posix-apiSource address posix-apiLength in bytes posix-apiFlagsw posix-apiSocket posix-apiLength in bytes posix-apiFlagsx posix-apiSocket posix-apiSource address posix-apiLength in bytes posix-apiFlagsy posix-apiSocket posix-apiDestination byte array posix-apiDestination offset posix-apiMaximum bytes to receive posix-apiFlags posix-apiBytes received into arrayz posix-apiSocket posix-apiDestination byte array posix-apiDestination offset posix-apiMaximum bytes to receive posix-apiFlags posix-apiMaximum socket address size posix-api9Remote host, bytes received into array, bytes needed for addrlen.{ posix-apiSocket posix-apiDestination byte array posix-apiMaximum bytes to receive posix-apiFlags posix-apiAddress posix-api#Number of bytes received into array| posix-apiSocket posix-apiDestination byte array posix-apiMaximum bytes to receive posix-apiFlags posix-apiAddress posix-api#Number of bytes received into array} posix-apiSocket posix-apiDestination byte array posix-apiDestination offset posix-apiMaximum bytes to receive posix-apiFlags posix-api#Number of bytes received into array~ posix-apiSocket posix-apiDestination byte array posix-apiMaximum bytes to receive posix-apiFlags posix-api#Number of bytes received into array posix-apiSocket posix-apiMaximum bytes per chunk posix-apiMaximum number of chunks posix-apiFlags posix-apiSocket posix-apiMaximum bytes per chunk posix-apiMaximum number of chunks posix-apiFlags posix-apiMaximum socket address size posix-apiSocket posix-apiSocket posix-apiSocketz !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~z[\]_`^abcdefmglnopqtsruhvwxyz}~{|ijk*+()%&'!"#$ WZXYV0123,-./89:;<=>5467?@ABCDIQRSJKLMNOPGEFTUH None".;Madkn  posix-apiThe  MSG_DONTWAIT receive flag or send flag. posix-apiThe  MSG_TRUNC receive flag. posix-apiThe  MSG_CTRUNC receive flag. posix-apiThe  SOCK_CLOEXEC receive flag or send flag. posix-apiThe  SOCK_NONBLOCK receive flag or send flag. posix-apiWIf enabled, the user supplies an IP header in front of the user data. Valid only for SOCK_RAW sockets. posix-apiThe size of a mmsghdr struct. posix-apiThe size of a udphdr struct. posix-apiThe size of an iphdr struct. posix-apiThis poke function requires the user to pack the version and the internet header length (IHL), each 4 bits, into a single 8-bit word. The version should be in the most significant bits. This function will marshal the value appropriately depending on the platform's bit-endianness.#None .FX posix-apiLinux extends the type argument of  2http://man7.org/linux/man-pages/man2/socket.2.htmlsocket: to allow setting two socket flags on socket creation:  SOCK_CLOEXEC and  SOCK_NONBLOCK. It is advisable to set  SOCK_CLOEXEC^ on when opening a socket on linux. For example, we may open a TCP Internet socket with: TuninterruptibleSocket internet (applySocketFlags closeOnExec stream) defaultProtocolBTo additionally open the socket in nonblocking mode (e.g. with  SOCK_NONBLOCK): euninterruptibleSocket internet (applySocketFlags (closeOnExec <> nonblocking) stream) defaultProtocol posix-apiReceive multiple messages. This does not provide the socket addresses or the control messages. It does not use any of the input-scattering that recvmmsgf offers, meaning that a single datagram is never split across noncontiguous memory. It supplies NULL for the timeout argument. All of the messages must have the same maximum size. All resulting byte arrays have been explicitly pinned. In addition to bytearrays corresponding to each datagram, this also provides the maximum msg_len that recvmmsg6 wrote back out. This is provided so that users of  MSG_TRUNC can detect when bytes were dropped from the end of a message (although it does let the user figure out which message had bytes dropped). posix-api/Receive multiple messages. This is similar to &uninterruptibleReceiveMultipleMessageA!. However, it also provides the sockaddr]s of the remote endpoints. These are written in contiguous memory to a bytearray of length #max_num_msgs * expected_sockaddr_sz. The sockaddrLs must all be expected to be of the same length. This function provides a sockaddr' size check that is non-zero when any sockaddrQ had a length other than the expected length. This can be used to detect if the sockaddr array has one or more corrupt sockaddr?s in it. All byte arrays returned by this function are pinned.%The values in the returned tuple are:Error-checking number for sockaddr/ size. Non-zero indicates that at least one sockaddr> required a number of bytes other than the expected number.!Pinned bytearray with all of the sockaddr$s in it as a array of structures.-The size of the largest message received. If  MSG_TRUNCM is used this lets the caller know if one or more messages were truncated.!The message data of each message.The sockaddrds bytearray and the unlifted array of messages are guaranteed to have the same number of elements.  posix-apiQAll three buffer arguments need to have the same length (in elements, not bytes). posix-apivAll three buffer arguments need to have the same length (in elements, not bytes). This discards the source addresses. posix-api Variant of  ? that allows setting flags on the newly-accepted connection. posix-apiSocket posix-apiMaximum bytes per message posix-apiMaximum number of messages posix-apiFlags posix-apiSocket posix-api Expected sockaddr size posix-apiMaximum bytes per message posix-apiMaximum number of messages posix-apiFlags posix-apiSocket posix-apiBuffer for payload lengths posix-api Buffer for  sockaddr_ins posix-apiBuffers for payloads posix-api9Maximum number of datagrams to receive, length of buffers posix-apiFlags posix-apiSocket posix-apiBuffer for payload lengths posix-apiBuffers for payloads posix-api9Maximum number of datagrams to receive, length of buffers posix-apiFlags posix-apiListening socket posix-apiMaximum socket address size posix-api8Set non-blocking and close-on-exec without extra syscall posix-api%Peer information and connected socketNone".;Md,None FXЗ posix-apiThe timeoutg argument is omitted since it is nonsense to choose anything other than 0 when using the unsafe FFI.  None"$'-.;FHMXadk posix-apiA data type corresponding to struct epoll_event. Linux defines this as: typedef union epoll_data { void *ptr; int fd; uint32_t u32; uint64_t u64; } epoll_data_t; struct epoll_event { uint32_t events; /* Epoll events */ epoll_data_t data; /* User data variable */ };pIt is a little difficult to capture what this type conveys, but we make an attempt. The second argument to the Event type constructor is either Addr, Fd, Word32, or Word645. This corresponds to the four possibilities in the  epoll_data union type. As long as the user monomorphizes this type when using it, there should not be any performance penalty for the flexibility afforded by this approach. posix-api Epoll events posix-apiUser data variable, named data in struct epoll_event. posix-apiThe  EPOLL_CTL_ADD control operation. posix-apiThe  EPOLL_CTL_MOD control operation. posix-apiThe  EPOLL_CTL_DEL control operation. posix-apiThe  EPOLL_CLOEXEC flag. posix-apiThe EPOLLIN. event. Can appear in a request or a response. posix-apiThe EPOLLOUT. event. Can appear in a request or a response. posix-apiThe EPOLLPRI. event. Can appear in a request or a response. posix-apiThe EPOLLERR event. The  5http://man7.org/linux/man-pages/man2/epoll_ctl.2.htmlepoll_ctl documentation says " epoll_waitC will always wait for this event; it is not necessary to set it in eventsK". Consequently, in this library, it has been marked as only appearing in Response positions. posix-apiThe EPOLLHUP event. The  5http://man7.org/linux/man-pages/man2/epoll_ctl.2.htmlepoll_ctl documentation says " epoll_waitC will always wait for this event; it is not necessary to set it in eventsK". Consequently, in this library, it has been marked as only appearing in Response positions. posix-apiThe  EPOLLRDHUP. event. Can appear in a request or a response. posix-apiThe EPOLLET! event. Only appears in requests. posix-apiqDoes the first event set entirely contain the second one? That is, is the second argument a subset of the first? posix-apiGDoes the first event set contain any of the events from the second one? posix-apiRead events from struct epoll_event. posix-apiRead data.fd from struct epoll_event. posix-apiRead data.ptr from struct epoll_event. posix-apiRead data.u32 from struct epoll_event. posix-apiRead data.u64 from struct epoll_event. posix-apiWrite data.u64 from struct epoll_event. posix-apiSince  epoll_event< includes an unaligned 64-bit word, it is difficult to use hsc2hsA to generate the marshalling code. Consequently, the offsets of events and dataS are currently hardcoded. Open an issue in this causes a problem on your platform.(None $'.FHk posix-api:Wait for an I/O event on an epoll file descriptor. The  &https://linux.die.net/man/2/epoll_waitLinux man page includes more details. The timeoutj argument is omitted since it is nonsense to choose anything other than 0 when using the unsafe FFI. posix-api:Wait for an I/O event on an epoll file descriptor. The  &https://linux.die.net/man/2/epoll_waitLinux man pageK includes more details. The event buffer must be a pinned byte array. posix-apipAdd, modify, or remove entries in the interest list of the epoll instance referred to by the file descriptor epfd.  %https://linux.die.net/man/2/epoll_ctlLinux man page includes more details. posix-apiSize, ignored since Linux 2.6.8 posix-apiFlags posix-apiEPoll file descriptor posix-api Event buffer posix-apiMaximum events posix-apiNumber of events received posix-apiEPoll file descriptor posix-apiEvent buffer, must be pinned posix-apiMaximum events posix-apiTimeout in milliseconds, use -1 to block forever. posix-apiNumber of events received posix-apiEPoll file descriptor (epfd) posix-api Operation:  EPOLL_CTL_ADD,  EPOLL_CTL_MOD, or  EPOLL_CTL_DEL posix-api3File descriptor whose registration will be affected posix-api2A single event. This is read from, not written to.''      ! " " # # $ $ % & ' ( ( ) ) * * + + , - - . . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ]^_`abcd efghijklmnopqrstuvwxyz{|}~       (posix-api-0.3.2.0-BoIaKbdag6QL1oCIBTRynoPosix.Directory Posix.Poll Posix.Socket Linux.Socket Posix.Types Linux.Epoll AssertionPosix.Poll.Types Posix.SelectPosix.Socket.TypesPosix.Socket.PlatformLinux.Socket.TypesuninterruptibleAcceptLinux.Epoll.TypesgetCurrentWorkingDirectoryExchangeRequestResponsePollFd$sel:descriptor:PollFd$sel:request:PollFd$sel:response:PollFdinputoutputerrorhangupinvalid isSubeventOfSocketAddressUnix$sel:path:SocketAddressUnixSocketAddressInternet$sel:port:SocketAddressInternet"$sel:address:SocketAddressInternet OptionValue SocketAddress MessageFlagsMessageSendReceive ShutdownType OptionNameLevelProtocol$sel:getProtocol:ProtocolTypeDomainstreamdatagramrawsequencedPacketunix unspecifiedinternet internet6 outOfBandpeekwaitAllnoSignaldefaultProtocol rawProtocolicmptcpudpipipv6readwrite readWrite levelSocket optionError broadcastpeekIOVectorBasepeekIOVectorLengthsizeofMessageHeadersizeofIOVectorpeekMessageHeaderNamepokeMessageHeaderNamepokeMessageHeaderNameLengthpokeMessageHeaderIOVectorpokeMessageHeaderIOVectorLengthpokeMessageHeaderControlpokeMessageHeaderControlLengthpokeMessageHeaderFlagspeekMessageHeaderNameLengthpeekMessageHeaderIOVectorpeekMessageHeaderIOVectorLengthpokeIOVectorBasepokeIOVectorLengthsizeofSocketAddressInternetencodeSocketAddressInternetdecodeSocketAddressInternetindexSocketAddressInternetencodeSocketAddressUnixuninterruptibleSocketuninterruptibleSocketPairuninterruptibleBinduninterruptibleListenconnectuninterruptibleConnectacceptaccept_uninterruptibleGetSocketNameuninterruptibleGetSocketOption!uninterruptibleSetSocketOptionInt sendByteArray writeVectoruninterruptibleSendMessageAuninterruptibleSendMessageBuninterruptibleSendByteArrayssendMutableByteArraysenduninterruptibleSenduninterruptibleSendByteArray#uninterruptibleSendMutableByteArrayuninterruptibleSendToByteArray&uninterruptibleSendToInternetByteArrayuninterruptibleSendToInternet%uninterruptibleSendToMutableByteArray-uninterruptibleSendToInternetMutableByteArrayreceivereceiveByteArrayuninterruptibleReceive&uninterruptibleReceiveMutableByteArray*uninterruptibleReceiveFromMutableByteArray"uninterruptibleReceiveFromInternet2uninterruptibleReceiveFromInternetMutableByteArray+uninterruptibleReceiveFromMutableByteArray_uninterruptibleReceiveFrom_uninterruptibleReceiveMessageAuninterruptibleReceiveMessageBcloseuninterruptibleCloseuninterruptibleErrorlessCloseuninterruptibleShutdownhostToNetworkShortnetworkToHostShorthostToNetworkLongnetworkToHostLong SocketFlagsdontWaittruncatecontrolTruncate closeOnExec nonblocking headerIncludesizeofUdpHeaderpokeUdpHeaderSourcePortpokeUdpHeaderDestinationPortpokeUdpHeaderLengthpokeUdpHeaderChecksumsizeofIpHeaderpokeIpHeaderVersionIhlpokeIpHeaderTypeOfServicepokeIpHeaderTotalLengthpokeIpHeaderIdentifierpokeIpHeaderFragmentOffsetpokeIpHeaderTimeToLivepokeIpHeaderProtocolpokeIpHeaderChecksumpokeIpHeaderSourceAddresspokeIpHeaderDestinationAddressapplySocketFlags&uninterruptibleReceiveMultipleMessageA&uninterruptibleReceiveMultipleMessageB&uninterruptibleReceiveMultipleMessageC&uninterruptibleReceiveMultipleMessageDuninterruptibleAccept4CNfds $fEqCNfds $fRealCNfds$fIntegralCNfds $fEnumCNfds $fNumCNfds $fOrdCNfds$fStorableCNfds$fFiniteBitsCNfds $fBitsCNfdsuninterruptiblePoll#uninterruptiblePollMutablePrimArray PrimEpollDataEvent$sel:events:Event$sel:payload:EventEvents EpollFlagsControlOperationaddmodifydeletepriority readHangup edgeTriggeredcontainsAllEventscontainsAnyEvents sizeofEventpeekEventEventspeekEventDataFdpeekEventDataPtrpeekEventDataU32peekEventDataU64pokeEventDataU64uninterruptibleCreateuninterruptibleCreate1#uninterruptibleWaitMutablePrimArraywaitMutablePrimArray&uninterruptibleControlMutablePrimArrayassertMutablePrimArrayPinned$fPrimSocketAddressInternetSocketAddressInternet6 $sel:port:SocketAddressInternet6$$sel:flowInfo:SocketAddressInternet6$$sel:addressA:SocketAddressInternet6$$sel:addressB:SocketAddressInternet6#$sel:scopeId:SocketAddressInternet6peekControlMessageHeaderLengthpeekControlMessageHeaderLevelpeekControlMessageHeaderTypepeekMessageHeaderControlpeekMessageHeaderControlLengthpeekMessageHeaderFlags"internalWriteSocketAddressInternetbaseSystem.Posix.TypesFdForeign.C.TypesCInt pinByteArrayForeign.C.ErrorgetErrnosizeofMultipleMessageHeaderpokeMultipleMessageHeaderName#pokeMultipleMessageHeaderNameLength!pokeMultipleMessageHeaderIOVector'pokeMultipleMessageHeaderIOVectorLength pokeMultipleMessageHeaderControl&pokeMultipleMessageHeaderControlLengthpokeMultipleMessageHeaderFlagspokeMultipleMessageHeaderLength#peekMultipleMessageHeaderNameLengthpeekMultipleMessageHeaderLength$fPrimEpollDataWord64indexByteArrayEpollreadByteArrayEpollwriteByteArrayEpollindexOffAddrEpollreadOffAddrEpollwriteOffAddrEpoll