Add socket and IPv4 support for x86_64

This commit is contained in:
2025-04-29 01:36:20 -04:00
parent 52a7a909ff
commit b890d54c8f
4 changed files with 263 additions and 2 deletions

64
sys.h
View File

@@ -37,6 +37,70 @@ int32_t openat(int32_t fd, const char* filename, uint32_t flags, uint32_t mode);
int close(unsigned int fd);
int fsync(unsigned int fd);
// Socket syscalls
int socket(int domain, int type, int protocol);
int setsockopt(int sockfd, int level, int optname, const void* optval, uint64_t optlen);
int bind(int sockfd, const void* sockaddr, uint64_t addrlen);
int listen(int fd, int backlog);
int accept(int sockfd, void* addr, uint64_t* addrlen);
int connect(int sockfd, void* addr, uint64_t addrlen);
int64_t sendto(int sockfd, const void* buf, uint64_t size, int flags, const void* sockaddr, uint64_t addrlen);
#define send(sockfd, buf, size, flags) sendto(sockfd, buf, size, flags, 0, 0)
int64_t recvfrom(int sockfd, const void* buf, uint64_t size, int flags, const void* sockaddr, uint64_t addrlen);
#define recv(sockfd, buf, size, flags) recvfrom(sockfd, buf, size, flags, 0, 0)
// Socket Domain constants
typedef unsigned short sa_family_t;
/* Supported address families. */
#define AF_UNIX 1 /* Unix domain sockets */
#define AF_LOCAL 1 /* POSIX name for AF_UNIX */
#define AF_INET 2 /* Internet IP Protocol */
#define AF_AX25 3 /* Amateur Radio AX.25 */
#define AF_INET6 10 /* IP version 6 */
#define AF_ROSE 11 /* Amateur Radio X.25 PLP */
#define AF_PACKET 17 /* Packet family */
#define AF_CAN 29 /* Controller Area Network */
#define AF_BLUETOOTH 31 /* Bluetooth sockets */
// Socket type constants
enum sock_type {
SOCK_STREAM = 1,
SOCK_DGRAM = 2,
SOCK_RAW = 3,
SOCK_RDM = 4,
SOCK_SEQPACKET = 5,
SOCK_DCCP = 6,
SOCK_PACKET = 10,
};
#if defined(__mips__)
#define SOL_SOCKET 0xffff
#else
#define SOL_SOCKET 1
#define SO_DEBUG 1
#define SO_REUSEADDR 2
#define SO_TYPE 3
#define SO_ERROR 4
#define SO_DONTROUTE 5
#define SO_BROADCAST 6
#define SO_SNDBUF 7
#define SO_RCVBUF 8
#define SO_SNDBUFFORCE 32
#define SO_RCVBUFFORCE 33
#define SO_KEEPALIVE 9
#define SO_OOBINLINE 10
#define SO_NO_CHECK 11
#define SO_PRIORITY 12
#define SO_LINGER 13
#define SO_BSDCOMPAT 14
#define SO_REUSEPORT 15
#define SO_PASSCRED 16
#define SO_PEERCRED 17
#define SO_RCVLOWAT 18
#define SO_SNDLOWAT 19
#define SO_RCVTIMEO 20
#define SO_SNDTIMEO 21
#endif
uint32_t fork();
// Provide memset for clang