Viewing: socket.c
📄 socket.c (Read Only) ⬅ To go back
#include "sys/socket.h"
#include "syscall.h"
#include "errno.h"

int socket(int domain, int type, int protocol) {
    return __syscall_ret(_syscall3(SYS_SOCKET, domain, type, protocol));
}

int bind(int sockfd, const struct sockaddr* addr, socklen_t addrlen) {
    return __syscall_ret(_syscall3(SYS_BIND, sockfd, (int)addr, (int)addrlen));
}

int listen(int sockfd, int backlog) {
    return __syscall_ret(_syscall2(SYS_LISTEN, sockfd, backlog));
}

int accept(int sockfd, struct sockaddr* addr, socklen_t* addrlen) {
    return __syscall_ret(_syscall3(SYS_ACCEPT, sockfd, (int)addr, (int)addrlen));
}

int connect(int sockfd, const struct sockaddr* addr, socklen_t addrlen) {
    return __syscall_ret(_syscall3(SYS_CONNECT, sockfd, (int)addr, (int)addrlen));
}

int send(int sockfd, const void* buf, size_t len, int flags) {
    return __syscall_ret(_syscall4(SYS_SEND, sockfd, (int)buf, (int)len, flags));
}

int recv(int sockfd, void* buf, size_t len, int flags) {
    return __syscall_ret(_syscall4(SYS_RECV, sockfd, (int)buf, (int)len, flags));
}

int sendto(int sockfd, const void* buf, size_t len, int flags,
           const struct sockaddr* dest_addr, socklen_t addrlen) {
    (void)addrlen;
    return __syscall_ret(_syscall5(SYS_SENDTO, sockfd, (int)buf, (int)len, flags, (int)dest_addr));
}

int recvfrom(int sockfd, void* buf, size_t len, int flags,
             struct sockaddr* src_addr, socklen_t* addrlen) {
    (void)addrlen;
    return __syscall_ret(_syscall5(SYS_RECVFROM, sockfd, (int)buf, (int)len, flags, (int)src_addr));
}

int sendmsg(int sockfd, const struct msghdr* msg, int flags) {
    return __syscall_ret(_syscall3(SYS_SENDMSG, sockfd, (int)msg, flags));
}

int recvmsg(int sockfd, struct msghdr* msg, int flags) {
    return __syscall_ret(_syscall3(SYS_RECVMSG, sockfd, (int)msg, flags));
}

int setsockopt(int sockfd, int level, int optname, const void* optval, socklen_t optlen) {
    return __syscall_ret(_syscall5(SYS_SETSOCKOPT, sockfd, level, optname, (int)optval, (int)optlen));
}

int getsockopt(int sockfd, int level, int optname, void* optval, socklen_t* optlen) {
    return __syscall_ret(_syscall5(SYS_GETSOCKOPT, sockfd, level, optname, (int)optval, (int)optlen));
}

int shutdown(int sockfd, int how) {
    return __syscall_ret(_syscall2(SYS_SHUTDOWN, sockfd, how));
}

int getpeername(int sockfd, struct sockaddr* addr, socklen_t* addrlen) {
    return __syscall_ret(_syscall3(SYS_GETPEERNAME, sockfd, (int)addr, (int)addrlen));
}

int getsockname(int sockfd, struct sockaddr* addr, socklen_t* addrlen) {
    return __syscall_ret(_syscall3(SYS_GETSOCKNAME, sockfd, (int)addr, (int)addrlen));
}