socket.cpp 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #include <sys/socket.h>
  2. #include <errno.h>
  3. #include <Kernel/Syscall.h>
  4. extern "C" {
  5. int socket(int domain, int type, int protocol)
  6. {
  7. int rc = syscall(SC_socket, domain, type, protocol);
  8. __RETURN_WITH_ERRNO(rc, rc, -1);
  9. }
  10. int bind(int sockfd, const sockaddr* addr, socklen_t addrlen)
  11. {
  12. int rc = syscall(SC_bind, sockfd, addr, addrlen);
  13. __RETURN_WITH_ERRNO(rc, rc, -1);
  14. }
  15. int listen(int sockfd, int backlog)
  16. {
  17. int rc = syscall(SC_listen, sockfd, backlog);
  18. __RETURN_WITH_ERRNO(rc, rc, -1);
  19. }
  20. int accept(int sockfd, sockaddr* addr, socklen_t* addrlen)
  21. {
  22. int rc = syscall(SC_accept, sockfd, addr, addrlen);
  23. __RETURN_WITH_ERRNO(rc, rc, -1);
  24. }
  25. int connect(int sockfd, const sockaddr* addr, socklen_t addrlen)
  26. {
  27. int rc = syscall(SC_connect, sockfd, addr, addrlen);
  28. __RETURN_WITH_ERRNO(rc, rc, -1);
  29. }
  30. ssize_t sendto(int sockfd, const void* data, size_t data_length, int flags, const struct sockaddr* addr, socklen_t addr_length)
  31. {
  32. Syscall::SC_sendto_params params { sockfd, data, data_length, flags, addr, addr_length };
  33. int rc = syscall(SC_sendto, &params);
  34. __RETURN_WITH_ERRNO(rc, rc, -1);
  35. }
  36. }