From: Vladislav Shpilevoy <v.shpilevoy@tarantool.org> To: tarantool-patches@freelists.org Cc: vdavydov.dev@gmail.com Subject: [PATCH 1/2] coio: make hints in coio_getaddrinfo optional Date: Fri, 17 May 2019 18:21:23 +0300 [thread overview] Message-ID: <324d46363de8cfa27620050be80f3a0d97dd050c.1558106383.git.v.shpilevoy@tarantool.org> (raw) In-Reply-To: <cover.1558106383.git.v.shpilevoy@tarantool.org> According to the standard by Open Group, getaddrinfo() hints argument is optional - it can be NULL. When it is NULL, hints is assumed to have 0 in ai_flags, ai_socktype, and ai_protocol; AF_UNSPEC in ai_family. See The Open Group Base Specifications. --- src/lib/core/coio_task.c | 12 ++++++++---- test/unit/coio.cc | 18 ++++++++++++++++++ test/unit/coio.result | 4 ++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/lib/core/coio_task.c b/src/lib/core/coio_task.c index 61f376203..d8095eef3 100644 --- a/src/lib/core/coio_task.c +++ b/src/lib/core/coio_task.c @@ -378,12 +378,16 @@ coio_getaddrinfo(const char *host, const char *port, * * Based on the workaround in https://bugs.python.org/issue17269 */ + if (hints != NULL) { #if defined(__APPLE__) && defined(AI_NUMERICSERV) - if (hints && (hints->ai_flags & AI_NUMERICSERV) && - (port == NULL || (port[0]=='0' && port[1]=='\0'))) port = "00"; + if ((hints->ai_flags & AI_NUMERICSERV) != 0 && + (port == NULL || (port[0]=='0' && port[1]=='\0'))) + port = "00"; #endif - /* Fill hinting information for use by connect(2) or bind(2). */ - memcpy(&task->hints, hints, sizeof(task->hints)); + memcpy(&task->hints, hints, sizeof(task->hints)); + } else { + task->hints.ai_family = AF_UNSPEC; + } /* make no difference between empty string and NULL for host */ if (host != NULL && *host) { task->host = strdup(host); diff --git a/test/unit/coio.cc b/test/unit/coio.cc index d1e744508..a2439bf46 100644 --- a/test/unit/coio.cc +++ b/test/unit/coio.cc @@ -68,6 +68,22 @@ test_call_f(va_list ap) return res; } +static void +test_getaddrinfo(void) +{ + header(); + plan(1); + const char *host = "127.0.0.1"; + const char *port = "3333"; + struct addrinfo *i; + /* NULL hints should work. It is a standard. */ + int rc = coio_getaddrinfo(host, port, NULL, &i, 1); + is(rc, 0, "getaddringo"); + freeaddrinfo(i); + check_plan(); + footer(); +} + static int main_f(va_list ap) { @@ -86,6 +102,8 @@ main_f(va_list ap) fiber_cancel(call_fiber); fiber_join(call_fiber); + test_getaddrinfo(); + ev_break(loop(), EVBREAK_ALL); return 0; } diff --git a/test/unit/coio.result b/test/unit/coio.result index 7d7477979..0373530b0 100644 --- a/test/unit/coio.result +++ b/test/unit/coio.result @@ -6,3 +6,7 @@ *** test_call_f *** # call done with res 0 *** test_call_f: done *** + *** test_getaddrinfo *** +1..1 +ok 1 - getaddringo + *** test_getaddrinfo: done *** -- 2.20.1 (Apple Git-117)
next prev parent reply other threads:[~2019-05-17 15:21 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-05-17 15:21 [PATCH 0/2] netbox connect timeout assertion Vladislav Shpilevoy 2019-05-17 15:21 ` Vladislav Shpilevoy [this message] 2019-05-17 15:21 ` [PATCH 2/2] coio: fix getaddrinfo assertion on 0 timeout Vladislav Shpilevoy 2019-05-20 14:53 ` [PATCH 0/2] netbox connect timeout assertion Vladimir Davydov
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=324d46363de8cfa27620050be80f3a0d97dd050c.1558106383.git.v.shpilevoy@tarantool.org \ --to=v.shpilevoy@tarantool.org \ --cc=tarantool-patches@freelists.org \ --cc=vdavydov.dev@gmail.com \ --subject='Re: [PATCH 1/2] coio: make hints in coio_getaddrinfo optional' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox