xref: /f-stack/lib/ff_api.h (revision a9643ea8)
1*a9643ea8Slogwang /*
2*a9643ea8Slogwang  * Copyright (C) 2017 THL A29 Limited, a Tencent company.
3*a9643ea8Slogwang  * All rights reserved.
4*a9643ea8Slogwang  *
5*a9643ea8Slogwang  * Redistribution and use in source and binary forms, with or without
6*a9643ea8Slogwang  * modification, are permitted provided that the following conditions are met:
7*a9643ea8Slogwang  *
8*a9643ea8Slogwang  * 1. Redistributions of source code must retain the above copyright notice, this
9*a9643ea8Slogwang  *   list of conditions and the following disclaimer.
10*a9643ea8Slogwang  * 2. Redistributions in binary form must reproduce the above copyright notice,
11*a9643ea8Slogwang  *   this list of conditions and the following disclaimer in the documentation
12*a9643ea8Slogwang  *   and/or other materials provided with the distribution.
13*a9643ea8Slogwang  *
14*a9643ea8Slogwang  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
15*a9643ea8Slogwang  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16*a9643ea8Slogwang  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17*a9643ea8Slogwang  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
18*a9643ea8Slogwang  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19*a9643ea8Slogwang  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20*a9643ea8Slogwang  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21*a9643ea8Slogwang  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22*a9643ea8Slogwang  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
23*a9643ea8Slogwang  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24*a9643ea8Slogwang  *
25*a9643ea8Slogwang  */
26*a9643ea8Slogwang 
27*a9643ea8Slogwang #ifndef _FSTACK_API_H
28*a9643ea8Slogwang #define _FSTACK_API_H
29*a9643ea8Slogwang 
30*a9643ea8Slogwang #ifdef __cplusplus
31*a9643ea8Slogwang extern "C" {
32*a9643ea8Slogwang #endif
33*a9643ea8Slogwang #include <sys/socket.h>
34*a9643ea8Slogwang #include <sys/select.h>
35*a9643ea8Slogwang #include <sys/poll.h>
36*a9643ea8Slogwang 
37*a9643ea8Slogwang #include "ff_event.h"
38*a9643ea8Slogwang #include "ff_errno.h"
39*a9643ea8Slogwang 
40*a9643ea8Slogwang struct linux_sockaddr {
41*a9643ea8Slogwang     short sa_family;
42*a9643ea8Slogwang     char sa_data[14];
43*a9643ea8Slogwang };
44*a9643ea8Slogwang 
45*a9643ea8Slogwang typedef int (*loop_func_t)(void *arg);
46*a9643ea8Slogwang 
47*a9643ea8Slogwang int ff_init(const char *conf, int argc, char * const argv[]);
48*a9643ea8Slogwang 
49*a9643ea8Slogwang void ff_run(loop_func_t loop, void *arg);
50*a9643ea8Slogwang 
51*a9643ea8Slogwang int ff_fcntl(int fd, int cmd, ...);
52*a9643ea8Slogwang 
53*a9643ea8Slogwang int ff_sysctl(const int *name, u_int namelen, void *oldp, size_t *oldlenp,
54*a9643ea8Slogwang     const void *newp, size_t newlen);
55*a9643ea8Slogwang 
56*a9643ea8Slogwang int ff_ioctl(int fd, unsigned long request, ...);
57*a9643ea8Slogwang 
58*a9643ea8Slogwang int ff_socket(int domain, int type, int protocol);
59*a9643ea8Slogwang 
60*a9643ea8Slogwang int ff_setsockopt(int s, int level, int optname, const void *optval,
61*a9643ea8Slogwang     socklen_t optlen);
62*a9643ea8Slogwang 
63*a9643ea8Slogwang int ff_getsockopt(int s, int level, int optname, void *optval,
64*a9643ea8Slogwang     socklen_t *optlen);
65*a9643ea8Slogwang 
66*a9643ea8Slogwang int ff_socketpair(int domain, int type, int protocol, int *sv);
67*a9643ea8Slogwang 
68*a9643ea8Slogwang int ff_listen(int s, int backlog);
69*a9643ea8Slogwang int ff_bind(int s, const struct linux_sockaddr *addr, socklen_t addrlen);
70*a9643ea8Slogwang int ff_accept(int s, struct linux_sockaddr *addr, socklen_t *addrlen);
71*a9643ea8Slogwang int ff_connect(int s, const struct linux_sockaddr *name, socklen_t namelen);
72*a9643ea8Slogwang int ff_close(int fd);
73*a9643ea8Slogwang int ff_shutdown(int s, int how);
74*a9643ea8Slogwang 
75*a9643ea8Slogwang int ff_getpeername(int s, struct linux_sockaddr *name,
76*a9643ea8Slogwang     socklen_t *namelen);
77*a9643ea8Slogwang int ff_getsockname(int s, struct linux_sockaddr *name,
78*a9643ea8Slogwang     socklen_t *namelen);
79*a9643ea8Slogwang 
80*a9643ea8Slogwang ssize_t ff_read(int d, void *buf, size_t nbytes);
81*a9643ea8Slogwang ssize_t ff_readv(int fd, const struct iovec *iov, int iovcnt);
82*a9643ea8Slogwang 
83*a9643ea8Slogwang ssize_t ff_write(int fd, const void *buf, size_t nbytes);
84*a9643ea8Slogwang ssize_t ff_writev(int fd, const struct iovec *iov, int iovcnt);
85*a9643ea8Slogwang 
86*a9643ea8Slogwang ssize_t ff_send(int s, const void *buf, size_t len, int flags);
87*a9643ea8Slogwang ssize_t ff_sendto(int s, const void *buf, size_t len, int flags,
88*a9643ea8Slogwang     const struct linux_sockaddr *to, socklen_t tolen);
89*a9643ea8Slogwang ssize_t ff_sendmsg(int s, const struct msghdr *msg, int flags);
90*a9643ea8Slogwang 
91*a9643ea8Slogwang ssize_t ff_recv(int s, void *buf, size_t len, int flags);
92*a9643ea8Slogwang ssize_t ff_recvfrom(int s, void *buf, size_t len, int flags,
93*a9643ea8Slogwang     struct linux_sockaddr *from, socklen_t *fromlen);
94*a9643ea8Slogwang ssize_t ff_recvmsg(int s, struct msghdr *msg, int flags);
95*a9643ea8Slogwang 
96*a9643ea8Slogwang int ff_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
97*a9643ea8Slogwang     struct timeval *timeout);
98*a9643ea8Slogwang 
99*a9643ea8Slogwang int ff_poll(struct pollfd fds[], nfds_t nfds, int timeout);
100*a9643ea8Slogwang 
101*a9643ea8Slogwang int ff_kqueue(void);
102*a9643ea8Slogwang int ff_kevent(int kq, const struct kevent *changelist, int nchanges,
103*a9643ea8Slogwang     struct kevent *eventlist, int nevents, const struct timespec *timeout);
104*a9643ea8Slogwang 
105*a9643ea8Slogwang #ifdef __cplusplus
106*a9643ea8Slogwang }
107*a9643ea8Slogwang #endif
108*a9643ea8Slogwang #endif
109*a9643ea8Slogwang 
110