From 7e531d78bf330bfac65cf3f208c2300b607decee Mon Sep 17 00:00:00 2001 From: Trumeet Date: Sun, 16 May 2021 19:23:13 -0700 Subject: First Commit --- net.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 net.c (limited to 'net.c') diff --git a/net.c b/net.c new file mode 100644 index 0000000..6fa5d55 --- /dev/null +++ b/net.c @@ -0,0 +1,55 @@ +/* + * Adopted from mcrcon, Copyright (c) 2012-2020, Tiiffi . + * https://github.com/Tiiffi/mcrcon/tree/b02201d689b3032bc681b28f175fd3d83d167293 + */ + +#include "net.h" +#include "common.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int net_connect(const char *host, const char *port, int *out) +{ + int sd; + struct addrinfo hints; + struct addrinfo *server_info, *p; + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_protocol = IPPROTO_TCP; + int ret = getaddrinfo(host, port, &hints, &server_info); + if(ret) + { + fprintf(stderr, _("Cannot resolve host %s: %s.\n"), host, strerror(ret)); + return EX_IOERR; + } + for (p = server_info; p != NULL; p = p->ai_next) + { + sd = socket(p->ai_family, p->ai_socktype, p->ai_protocol); + if (sd == -1) continue; + ret = connect(sd, p->ai_addr, p->ai_addrlen); + if(ret == -1) + { + close(sd); + continue; + } + break; + } + if(p == NULL) + { + fprintf(stderr, _("Cannot connect to %s:%s : %s.\n"), host, port, strerror(errno)); + freeaddrinfo(server_info); + return EX_IOERR; + } + freeaddrinfo(server_info); + *out = sd; + return 0; +} -- cgit v1.2.3