From dd3906c96555805af2580d593cf9429170b07a02 Mon Sep 17 00:00:00 2001 From: Nic Gaffney Date: Wed, 28 Jun 2023 23:55:00 -0500 Subject: sockets --- std/stdlib.c | 13 +++++++++++++ std/stdlib.sloth | 2 +- std/stdsocket.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ std/stdsocket.sloth | 5 +++++ 4 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 std/stdsocket.c create mode 100644 std/stdsocket.sloth (limited to 'std') diff --git a/std/stdlib.c b/std/stdlib.c index 4a650a4..ed848c3 100644 --- a/std/stdlib.c +++ b/std/stdlib.c @@ -3,6 +3,7 @@ #include #include #include +#include int wait(int msec) { struct timespec ts; @@ -40,6 +41,18 @@ int as_int(float x) { return (int) x; } +bool sequals(char* a, char* b) { + if (strlen(a) != strlen(b)) { + return false; + } + for (int i=0; i +#include +#include +#include +#include +#include +#define PORT 8080 + +int serversock() { + int opt = 1; + int sock = socket(AF_INET, SOCK_STREAM, 0); + struct sockaddr_in address; + int addrlen = sizeof(address); + setsockopt(sock, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt, sizeof(opt)); + address.sin_family = AF_INET; + address.sin_addr.s_addr = INADDR_ANY; + address.sin_port = htons(PORT); + + bind(sock, (struct sockaddr*)&address, sizeof(address)); + listen(sock, 3); + int new_sock = accept(sock, (struct sockaddr*)&address, (socklen_t*)&addrlen); + return new_sock; +} + +int clientsock() { + struct sockaddr_in serv_addr; + int sock = socket(AF_INET, SOCK_STREAM, 0); + serv_addr.sin_family = AF_INET; + serv_addr.sin_port = htons(PORT); + + inet_pton(AF_INET, "127.0.0.1", &serv_addr.sin_addr); + int status = connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr)); + return sock; +} + +char* recvsock(int soc) { + char* buf = malloc(1024); + int valread = read(soc, buf, 1024); + return buf; +} + +void sendsock(char* msg, int soc) { + send(soc, msg, strlen(msg), 0); +} + +void closesock(int soc) { + close(soc); +} diff --git a/std/stdsocket.sloth b/std/stdsocket.sloth new file mode 100644 index 0000000..46a5328 --- /dev/null +++ b/std/stdsocket.sloth @@ -0,0 +1,5 @@ +foreign fn serversock() Int; +foreign fn clientsock() Int; +foreign fn closesock(soc: Int); +foreign fn sendsock(msg: String, soc: Int); +foreign fn recvsock(soc: Int) String; -- cgit v1.2.3