fixed ssl.c bug when ssl backend returns IO_BLOCKED but IO engine doesn't get informe...
[ircu2.10.12-pk.git] / include / ircd_osdep.h
1 /** @file ircd_osdep.h
2  * @brief Public definitions and APIs for OS-dependent operations.
3  * @version $Id: ircd_osdep.h 1626 2006-03-14 03:45:52Z entrope $
4  */
5 #ifndef INCLUDED_ircd_osdep_h
6 #define INCLUDED_ircd_osdep_h
7
8 struct Client;
9 struct irc_sockaddr;
10 struct MsgQ;
11
12 /** Result of an input/output operation. */
13 typedef enum IOResult {
14   IO_FAILURE = -1, /**< Serious I/O error (not due to blocking). */
15   IO_BLOCKED = 0,  /**< I/O could not start because it would block. */
16   IO_SUCCESS = 1   /**< I/O succeeded. */
17 } IOResult;
18
19 /*
20  * NOTE: osdep.c files should never need to know the actual size of a
21  * Client struct. When passed as a parameter, the pointer just needs
22  * to be forwarded to the enumeration function.
23  */
24 /** Callback function to show rusage information.
25  * @param cptr Client to receive the message.
26  * @param msg Text message to send to user.
27  */
28 typedef void (*EnumFn)(struct Client* cptr, const char* msg);
29
30 extern int os_disable_options(int fd);
31 extern int os_get_rusage(struct Client* cptr, int uptime, EnumFn enumerator);
32 extern int os_get_sockerr(int fd);
33 extern int os_get_sockname(int fd, struct irc_sockaddr* sin_out);
34 extern int os_get_peername(int fd, struct irc_sockaddr* sin_out);
35 extern int os_socket(const struct irc_sockaddr* local, int type, const char* port_name, int family);
36 extern int os_accept(int fd, struct irc_sockaddr* peer);
37 extern IOResult os_sendto_nonb(int fd, const char* buf, unsigned int length,
38                                unsigned int* length_out, unsigned int flags,
39                                const struct irc_sockaddr* peer);
40 extern IOResult os_recv_nonb(int fd, char* buf, unsigned int length,
41                         unsigned int* length_out);
42 extern IOResult os_send_nonb(int fd, const char* buf, unsigned int length,
43                         unsigned int* length_out);
44 extern IOResult os_sendv_nonb(int fd, struct MsgQ* buf,
45                               unsigned int* len_in, unsigned int* len_out);
46 extern IOResult os_recvfrom_nonb(int fd, char* buf, unsigned int len,
47                                  unsigned int* length_out,
48                                  struct irc_sockaddr* from_out);
49 extern IOResult os_connect_nonb(int fd, const struct irc_sockaddr* sin);
50 extern int os_set_fdlimit(unsigned int max_descriptors);
51 extern int os_set_listen(int fd, int backlog);
52 extern int os_set_nonblocking(int fd);
53 extern int os_set_reuseaddr(int fd);
54 extern int os_set_sockbufs(int fd, unsigned int ssize, unsigned int rsize);
55 extern int os_set_tos(int fd,int tos);
56 extern int os_socketpair(int sv[2]);
57
58 #endif /* INCLUDED_ircd_osdep_h */
59