diff --git a/base/usr/include/arpa/inet.h b/base/usr/include/arpa/inet.h new file mode 100644 index 00000000..bb2988f0 --- /dev/null +++ b/base/usr/include/arpa/inet.h @@ -0,0 +1,11 @@ +#pragma once + +#include <_cheader.h> +#include +#include + +_Begin_C_Header + +#define INADDR_ANY (unsigned long int)0x0 + +_End_C_Header diff --git a/base/usr/include/netdb.h b/base/usr/include/netdb.h new file mode 100644 index 00000000..da3c1795 --- /dev/null +++ b/base/usr/include/netdb.h @@ -0,0 +1,23 @@ +#pragma once + +#include <_cheader.h> + +#include + +_Begin_C_Header + +extern int getnameinfo(const struct sockaddr *addr, socklen_t addrlen, + char *host, socklen_t hostlen, + char *serv, socklen_t servlen, int flags); + +extern int getaddrinfo(const char *node, const char *service, + const struct addrinfo *hints, + struct addrinfo **res); + +extern void freeaddrinfo(struct addrinfo *res); + +#define NI_NUMERICHOST 1 +#define NI_MAXHOST 255 + + +_End_C_Header diff --git a/base/usr/include/sys/socket.h b/base/usr/include/sys/socket.h index 277f0512..9e90de95 100644 --- a/base/usr/include/sys/socket.h +++ b/base/usr/include/sys/socket.h @@ -18,6 +18,7 @@ _Begin_C_Header #define SOL_SOCKET 0 #define SO_KEEPALIVE 1 +#define SO_REUSEADDR 2 struct hostent { char *h_name; /* official name of host */ @@ -73,6 +74,10 @@ struct msghdr { int msg_flags; /* flags on received message */ }; +struct sockaddr_storage { + unsigned short ss_family; + char _ss_pad[128]; +}; typedef uint32_t in_addr_t; typedef uint16_t in_port_t; @@ -100,6 +105,9 @@ extern int getpeername(int sockfd, struct sockaddr *addr, socklen_t *addrlen); extern int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); extern int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); +extern int connect(int sockfd, const struct sockaddr * addr, socklen_t addrlen); +extern int shutdown(int sockfd, int how); + _End_C_Header diff --git a/base/usr/include/time.h b/base/usr/include/time.h index bc307efb..d517f3ba 100644 --- a/base/usr/include/time.h +++ b/base/usr/include/time.h @@ -37,4 +37,16 @@ typedef int clock_t; extern clock_t clock(void); #define CLOCKS_PER_SEC 1 +struct timespec { + time_t tv_sec; + long tv_nsec; +}; + +typedef int clockid_t; + +#define CLOCK_REALTIME 0 +#define CLOCK_MONOTONIC 1 + +extern int clock_gettime(clockid_t clk_id, struct timespec *tp); + _End_C_Header diff --git a/libc/sys/network.c b/libc/sys/network.c index 0c149cba..28eef78e 100644 --- a/libc/sys/network.c +++ b/libc/sys/network.c @@ -123,4 +123,7 @@ int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t return -1; } - +int shutdown(int sockfd, int how) { + UNIMPLEMENTED; + return -1; +} diff --git a/libc/time/clock_gettime.c b/libc/time/clock_gettime.c new file mode 100644 index 00000000..5d69a0d6 --- /dev/null +++ b/libc/time/clock_gettime.c @@ -0,0 +1,17 @@ +#include +#include +#include + +int clock_gettime(clockid_t clk_id, struct timespec *tp) { + if (clk_id < 0 || clk_id > 1) { + errno = EINVAL; + return -1; + } + struct timeval t; + gettimeofday(&t, NULL); + + tp->tv_sec = t.tv_sec; + tp->tv_nsec = t.tv_usec * 1000; + + return 0; +}