aboutsummaryrefslogtreecommitdiff
path: root/jim-aio.c
diff options
context:
space:
mode:
authorprpr19xx <58330423+prpr19xx@users.noreply.github.com>2021-03-04 02:08:01 +0000
committerSteve Bennett <steveb@workware.net.au>2021-03-07 14:56:34 +1000
commit5fed880195c92cc4d70cd960a116d4130f1a37f4 (patch)
tree1034d95a34d7b05b7aecf94d718dd9d089c1c238 /jim-aio.c
parent64423a3bb7d2ac4eaa8bc7806fa2173181854347 (diff)
downloadjimtcl-5fed880195c92cc4d70cd960a116d4130f1a37f4.zip
jimtcl-5fed880195c92cc4d70cd960a116d4130f1a37f4.tar.gz
jimtcl-5fed880195c92cc4d70cd960a116d4130f1a37f4.tar.bz2
aio: pass socktype to getaddrinfo()
Some old systems are not happy with a numeric service and no socktype. Fixes #196 Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim-aio.c')
-rw-r--r--jim-aio.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/jim-aio.c b/jim-aio.c
index 13c839e..c0d539c 100644
--- a/jim-aio.c
+++ b/jim-aio.c
@@ -415,7 +415,7 @@ static void freeaddrinfo(struct addrinfo *ai)
}
#endif
-static int JimParseIPv6Address(Jim_Interp *interp, const char *hostport, union sockaddr_any *sa, socklen_t *salen)
+static int JimParseIPv6Address(Jim_Interp *interp, int socktype, const char *hostport, union sockaddr_any *sa, socklen_t *salen)
{
#if IPV6
/*
@@ -459,6 +459,7 @@ static int JimParseIPv6Address(Jim_Interp *interp, const char *hostport, union s
memset(&req, '\0', sizeof(req));
req.ai_family = PF_INET6;
+ req.ai_socktype = socktype;
if (getaddrinfo(sthost, stport, &req, &ai)) {
Jim_SetResultFormatted(interp, "Not a valid address: %s:%s", sthost, stport);
@@ -478,7 +479,7 @@ static int JimParseIPv6Address(Jim_Interp *interp, const char *hostport, union s
#endif
}
-static int JimParseIpAddress(Jim_Interp *interp, const char *hostport, union sockaddr_any *sa, socklen_t *salen)
+static int JimParseIpAddress(Jim_Interp *interp, int socktype, const char *hostport, union sockaddr_any *sa, socklen_t *salen)
{
/* An IPv4 addr/port looks like:
* 192.168.1.5
@@ -507,6 +508,7 @@ static int JimParseIpAddress(Jim_Interp *interp, const char *hostport, union soc
memset(&req, '\0', sizeof(req));
req.ai_family = PF_INET;
+ req.ai_socktype = socktype;
if (getaddrinfo(sthost, stport, &req, &ai)) {
ret = JIM_ERR;
@@ -536,7 +538,7 @@ static int JimParseDomainAddress(Jim_Interp *interp, const char *path, union soc
}
#endif
-static int JimParseSocketAddress(Jim_Interp *interp, int family, const char *addr, union sockaddr_any *sa, socklen_t *salen)
+static int JimParseSocketAddress(Jim_Interp *interp, int family, int socktype, const char *addr, union sockaddr_any *sa, socklen_t *salen)
{
switch (family) {
#if UNIX_SOCKETS
@@ -544,9 +546,9 @@ static int JimParseSocketAddress(Jim_Interp *interp, int family, const char *add
return JimParseDomainAddress(interp, addr, sa, salen);
#endif
case PF_INET6:
- return JimParseIPv6Address(interp, addr, sa, salen);
+ return JimParseIPv6Address(interp, socktype, addr, sa, salen);
case PF_INET:
- return JimParseIpAddress(interp, addr, sa, salen);
+ return JimParseIpAddress(interp, socktype, addr, sa, salen);
}
return JIM_ERR;
}
@@ -992,7 +994,7 @@ static int aio_cmd_sendto(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
const char *addr = Jim_String(argv[1]);
socklen_t salen;
- if (JimParseSocketAddress(interp, af->addr_family, addr, &sa, &salen) != JIM_OK) {
+ if (JimParseSocketAddress(interp, af->addr_family, SOCK_DGRAM, addr, &sa, &salen) != JIM_OK) {
return JIM_ERR;
}
wdata = Jim_GetString(argv[0], &wlen);
@@ -2295,7 +2297,7 @@ static int JimAioSockCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
return JIM_ERR;
}
if (bind_addr) {
- if (JimParseSocketAddress(interp, family, bind_addr, &sa, &salen) != JIM_OK) {
+ if (JimParseSocketAddress(interp, family, type, bind_addr, &sa, &salen) != JIM_OK) {
close(sock);
return JIM_ERR;
}
@@ -2309,7 +2311,7 @@ static int JimAioSockCommand(Jim_Interp *interp, int argc, Jim_Obj *const *argv)
}
}
if (connect_addr) {
- if (JimParseSocketAddress(interp, family, connect_addr, &sa, &salen) != JIM_OK) {
+ if (JimParseSocketAddress(interp, family, type, connect_addr, &sa, &salen) != JIM_OK) {
close(sock);
return JIM_ERR;
}