mengdemao / lazybsd

用户态网络库实现
https://mengdemao.github.io/lazybsd/
BSD 3-Clause "New" or "Revised" License
4 stars 2 forks source link

lazybsd接口实现 #8

Closed mengdemao closed 1 month ago

mengdemao commented 5 months ago

lazybsd接口实现

struct linux_sockaddr {
    short sa_family;
    char sa_data[14];
};

#define AF_INET6_LINUX    10
#define PF_INET6_LINUX    AF_INET6_LINUX
#define AF_INET6_FREEBSD    28
#define PF_INET6_FREEBSD    AF_INET6_FREEBSD

初始化函数

typedef int (*loop_func_t)(void *arg);

int lazy_init(int argc, char * const argv[]);

void lazy_run(loop_func_t loop, void *arg);
int lazy_fcntl(int fd, int cmd, ...);

int lazy_sysctl(const int *name, u_int namelen, void *oldp, size_t *oldlenp,
    const void *newp, size_t newlen);

int lazy_ioctl(int fd, unsigned long request, ...);
int lazy_socket(int domain, int type, int protocol);

int lazy_setsockopt(int s, int level, int optname, const void *optval,
    socklen_t optlen);

int lazy_getsockopt(int s, int level, int optname, void *optval,
    socklen_t *optlen);

int lazy_listen(int s, int backlog);
int lazy_bind(int s, const struct linux_sockaddr *addr, socklen_t addrlen);
int lazy_accept(int s, struct linux_sockaddr *addr, socklen_t *addrlen);
int lazy_connect(int s, const struct linux_sockaddr *name, socklen_t namelen);
int lazy_close(int fd);
int lazy_shutdown(int s, int how);

int lazy_getpeername(int s, struct linux_sockaddr *name,
    socklen_t *namelen);
int lazy_getsockname(int s, struct linux_sockaddr *name,
    socklen_t *namelen);

ssize_t lazy_read(int d, void *buf, size_t nbytes);
ssize_t lazy_readv(int fd, const struct iovec *iov, int iovcnt);

ssize_t lazy_write(int fd, const void *buf, size_t nbytes);
ssize_t lazy_writev(int fd, const struct iovec *iov, int iovcnt);

ssize_t lazy_send(int s, const void *buf, size_t len, int flags);
ssize_t lazy_sendto(int s, const void *buf, size_t len, int flags, const struct linux_sockaddr *to, socklen_t tolen);
ssize_t lazy_sendmsg(int s, const struct msghdr *msg, int flags);

ssize_t lazy_recv(int s, void *buf, size_t len, int flags);
ssize_t lazy_recvfrom(int s, void *buf, size_t len, int flags, struct linux_sockaddr *from, socklen_t *fromlen);
ssize_t lazy_recvmsg(int s, struct msghdr *msg, int flags);

int lazy_select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds,
    struct timeval *timeout);

int lazy_poll(struct pollfd fds[], nfds_t nfds, int timeout);

int lazy_kqueue(void);
int lazy_kevent(int kq, const struct kevent *changelist, int nchanges,
    struct kevent *eventlist, int nevents, const struct timespec *timeout);
int lazy_kevent_do_each(int kq, const struct kevent *changelist, int nchanges,
    void *eventlist, int nevents, const struct timespec *timeout,
    void (*do_each)(void **, struct kevent *));

int lazy_gettimeofday(struct timeval *tv, struct timezone *tz);
int lazy_settimeofday(const struct timeval *tv, const struct timezone *tz)

int lazy_dup(int oldfd);
int lazy_dup2(int oldfd, int newfd);