From 260faf6104c70a72a81b2c9a01253fff56dbac24 Mon Sep 17 00:00:00 2001 From: Nakidai Date: Fri, 29 Aug 2025 04:25:26 +0300 Subject: Add code --- sami.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 sami.c (limited to 'sami.c') diff --git a/sami.c b/sami.c new file mode 100644 index 0000000..64adf0a --- /dev/null +++ b/sami.c @@ -0,0 +1,55 @@ +#include "sami.h" + +#include +#include +#include + +#include +#include +#include + + +int SAMI_make(SAMI *actor, SAMI_Handler *handler, void *arg) +{ + int pair[2]; + + if (socketpair(AF_UNIX, SOCK_DGRAM, 0, pair) == -1) + return 1; + actor->fd = pair[0]; + + if (!(actor->pid = fork())) + { + SAMI__fd = pair[1]; + handler(arg); + exit(0); + } + + return actor->pid == -1; +} + +int SAMI_send(SAMI *actor, void *buf, size_t length) +{ + return send(actor->fd, buf, length, 0) == -1; +} + +int SAMI_recv(void *buf, size_t length) +{ + return recvfrom(SAMI__fd, buf, length, 0, 0, 0) == -1; +} + +int SAMI_kill(SAMI *actor) +{ + int res; + + if (kill(actor->pid, SIGKILL)) + return 1; + + for (;;) + if (waitpid(actor->pid, 0, 0) == -1) + if (errno == EINTR) + continue; + else + return 1; + else + return 0; +} -- cgit 1.4.1