diff options
author | Aleksey Veresov <aleksey@veresov.pro> | 2020-03-20 23:06:46 +0300 |
---|---|---|
committer | Aleksey Veresov <aleksey@veresov.pro> | 2020-03-20 23:06:46 +0300 |
commit | 8acbd33a82d2c13e70eb17447bc6abfd86cf9512 (patch) | |
tree | f89d1c6ec04e3ba418b63c37202d6abc4f08138e /src/session.c | |
parent | fcffb003f36a4357b6ba88e6b5e2239d7d111a6a (diff) | |
download | magi-8acbd33a82d2c13e70eb17447bc6abfd86cf9512.tar magi-8acbd33a82d2c13e70eb17447bc6abfd86cf9512.tar.xz magi-8acbd33a82d2c13e70eb17447bc6abfd86cf9512.zip |
[magi]
Diffstat (limited to 'src/session.c')
-rw-r--r-- | src/session.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/session.c b/src/session.c new file mode 100644 index 0000000..35e9200 --- /dev/null +++ b/src/session.c @@ -0,0 +1,40 @@ +#include "session.h" + +#include <arpa/inet.h> +#include <string.h> +#include <sys/socket.h> +#include <sys/un.h> + + +void magi_session_init(magi_session *s) +{ + s->socket = 0; +} + +void magi_session_free(magi_session *s) +{ + if (s->socket) { + shutdown(s->socket, SHUT_RDWR); + s->socket = 0; + } +} + + +int magi_session_inet(magi_session *s, const char *address, int port) +{ + struct sockaddr_in addr; + s->socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + addr.sin_family = AF_INET; + addr.sin_port = htons(port); + addr.sin_addr.s_addr = inet_addr(address); + return !connect(s->socket, (struct sockaddr *)&addr, sizeof(addr)); +} + +int magi_session_unix(magi_session *s, const char *path) +{ + struct sockaddr_un addr; + s->socket = socket(AF_UNIX, SOCK_STREAM, IPPROTO_TCP); + addr.sun_family = AF_UNIX; + strncpy(addr.sun_path, path, sizeof(addr.sun_path) - 1); + return !connect(s->socket, (struct sockaddr *)&addr, sizeof(addr)); +} |