summaryrefslogtreecommitdiff
path: root/include/sys/socket.h
diff options
context:
space:
mode:
authorKacper <kacper@mail.openlinux.dev>2025-12-07 20:10:31 +0100
committerKacper <kacper@mail.openlinux.dev>2025-12-07 20:10:31 +0100
commitfc00c656c96528112d05cf0edf8631bd5eaea446 (patch)
treea6e0e6c588191a8bd1c64afc3b7a258e3e66c236 /include/sys/socket.h
Add build system scaffolding and libc headers
Diffstat (limited to 'include/sys/socket.h')
-rw-r--r--include/sys/socket.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/include/sys/socket.h b/include/sys/socket.h
new file mode 100644
index 00000000..d8a48dd0
--- /dev/null
+++ b/include/sys/socket.h
@@ -0,0 +1,142 @@
+#ifndef __SYS_SOCKET_H
+#define __SYS_SOCKET_H
+
+#define SCM_RIGHTS 0x01
+
+#define CMSG_DATA(cmsg) ((void *)(cmsg) + sizeof(struct cmsghdr))
+
+#define CMSG_NXTHDR(mhdr, cmsg) \
+ ((cmsg)->cmsg_len < sizeof(struct cmsghdr) || \
+ (((cmsg)->cmsg_len + sizeof(long) - 1) & \
+ ~(long)(sizeof(long) - 1)) + \
+ sizeof(struct cmsghdr) >= \
+ ((unsigned char *)(mhdr)->msg_control + \
+ (mhdr)->msg_controllen) - \
+ (unsigned char *)(cmsg) ? \
+ 0 : \
+ (struct cmsghdr *)((unsigned char *)(cmsg) + \
+ __CMSG_LEN(cmsg)))
+
+#define CMSG_FIRSTHDR(mhdr) \
+ ((size_t)(mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
+ (struct cmsghdr *)(mhdr)->msg_control : \
+ (struct cmsghdr *)0)
+
+#define CMSG_SPACE(len) (CMSG_ALIGN(len) + CMSG_ALIGN(sizeof(struct cmsghdr)))
+
+#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len))
+
+struct linger {
+ int l_onoff;
+ int l_linger;
+};
+
+#define SOCK_STREAM 1
+#define SOCK_DGRAM 2
+#define SOCK_RAW 3
+#define SOCK_RDM 4
+#define SOCK_SEQPACKET 5
+#define SOCK_DCCP 6
+#define SOCK_PACKET = 10
+
+// TODO: fill with fcntl values
+#define SOCK_NONBLOCK O_NONBLOCK
+#define SOCK_CLOEXEC O_CLOEXEC
+#define SOCK_CLOFORK 0
+
+#define SO_ACCEPTCONN 30
+#define SO_BROADCAST 6
+#define SO_DEBUG 1
+#define SO_DOMAIN 39
+#define SO_DONTROUTE 5
+#define SO_ERROR 4
+#define SO_KEEPALIVE 9
+#define SO_LINGER 13
+#define SO_OOBINLINE 10
+#define SO_PROTOCOL 38
+#define SO_RCVBUF 8
+#define SO_RCVLOWAT 18
+#define SO_RCVTIMEO 66
+#define SO_SNDBUF 7
+#define SO_SNDLOWAT 19
+#define SO_SNDTIMEO 67
+#define SO_TYPEA 3
+#define SOL_SOCKET 1
+
+#define SOMAXCONN 4096
+
+#define MSG_CMSG_CLOFORK 0x00000000
+#define MSG_OOB 0x00000001
+#define MSG_PEEK 0x00000002
+#define MSG_DONTROUTE 0x00000004
+#define MSG_CTRUNC 0x00000008
+#define MSG_TRUNC 0x00000020
+#define MSG_EOR 0x00000080
+#define MSG_WAITALL 0x00000100
+#define MSG_NOSIGNAL 0x00004000
+#define MSG_CMSG_CLOEXEC 0x40000000
+
+#define AF_UNSPEC 0
+#define AF_UNIX 1
+#define AF_INET 2
+#define AF_INET6 10
+
+#define SHUT_RD 0
+#define SHUT_WR 1
+#define SHUT_RDWR 2
+
+typedef __INT32_TYPE__ socklen_t;
+typedef __UINT16_TYPE__ sa_family_t;
+typedef __SIZE_TYPE__ size_t;
+typedef __INT64_TYPE__ ssize_t;
+
+struct sockaddr {
+ sa_family_t sa_family;
+ char sa_data[];
+};
+
+struct sockaddr_storage {
+ sa_family_t ss_family;
+ char __padding[128 - sizeof(long) - sizeof(sa_family_t)];
+ unsigned long __align;
+};
+
+struct msghdr {
+ void *msg_name;
+ socklen_t msg_namelen;
+ struct iovec *msg_iov;
+ int msg_iovlen;
+ void *msg_control;
+ socklen_t msg_controllen;
+ int msg_flags;
+};
+
+struct cmsghdr {
+ socklen_t cmsg_len;
+ int cmsg_level;
+ int cmsg_type;
+};
+
+int accept(int, struct sockaddr *restrict, socklen_t *restrict);
+int accept4(int, struct sockaddr *restrict, socklen_t *restrict, int);
+int bind(int, const struct sockaddr *, socklen_t);
+int connect(int, const struct sockaddr *, socklen_t);
+int getpeername(int, struct sockaddr *restrict, socklen_t *restrict);
+int getsockname(int, struct sockaddr *restrict, socklen_t *restrict);
+int getsockopt(int, int, int, void *restrict, socklen_t *restrict);
+int listen(int, int);
+ssize_t recv(int, void *, size_t, int);
+ssize_t recvfrom(int, void *restrict, size_t, int, struct sockaddr *restrict,
+ socklen_t *restrict);
+ssize_t recvmsg(int, struct msghdr *, int);
+ssize_t send(int, const void *, size_t, int);
+ssize_t sendmsg(int, const struct msghdr *, int);
+ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *,
+ socklen_t);
+int setsockopt(int, int, int, const void *, socklen_t);
+int shutdown(int, int);
+int sockatmark(int);
+int socket(int, int, int);
+int socketpair(int, int, int, int[2]);
+
+#endif