From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 63CCF25501 for ; Tue, 20 Aug 2019 08:16:38 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id GjhKBU_wpYAC for ; Tue, 20 Aug 2019 08:16:38 -0400 (EDT) Received: from smtp41.i.mail.ru (smtp41.i.mail.ru [94.100.177.101]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id C3AAC20199 for ; Tue, 20 Aug 2019 08:16:37 -0400 (EDT) Subject: [tarantool-patches] Re: [PATCH] Replace sendmsg with sendto shortcut References: <20190820120102.60158-1-m.melentiev@corp.mail.ru> From: "Maxim Melentiev" (Redacted sender "m.melentiev" for DMARC) Message-ID: <685c8df1-3ebb-07d7-44ba-2c79dce115c9@corp.mail.ru> Date: Tue, 20 Aug 2019 15:16:35 +0300 MIME-Version: 1.0 In-Reply-To: <20190820120102.60158-1-m.melentiev@corp.mail.ru> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-Language: ru Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-Help: List-Unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-Subscribe: List-Owner: List-post: List-Archive: To: tarantool-patches@freelists.org Cc: kostja@tarantool.org, alexander.turenko@tarantool.org ping Konstantin Osipov, Alexander Turenko Sorry, forgot to CC in initial email and then pinged in wrong thread. On 20/08/2019 15:01, Max Melentiev (Redacted sender m.melentiev for DMARC) wrote: > There is a problem with calculating .msg_namelen field > of msghdr struct. Instead of > > .msg_name = &sa, > .msg_namelen = sizeof(sa.sun_family) + strlen(sd_unix_path), > > it must set as > > .msg_namelen = sizeof(sa) // larger value than current invalid one > > It works on linux but when I tried to enable this feature for macOS > it didn't (maybe because of different order of fields in the struct). > > Instead of fixing calculation, I've replaced original sendmsg call > with sendto, because it's a convenient shortcut which > simplifies code and can prevent such mistakes. > --- > > Preview: https://github.com/printercu/tarantool/commit/bc30b1093be1d03507bf84ca218b03bec5e0244a > > src/systemd.c | 13 ++----------- > 1 file changed, 2 insertions(+), 11 deletions(-) > > diff --git a/src/systemd.c b/src/systemd.c > index b6c48afe2..9c0a26dd2 100644 > --- a/src/systemd.c > +++ b/src/systemd.c > @@ -100,23 +100,14 @@ int systemd_notify(const char *message) { > struct sockaddr_un sa = { > .sun_family = AF_UNIX, > }; > - struct iovec vec = { > - .iov_base = (char *)message, > - .iov_len = (size_t )strlen(message) > - }; > - struct msghdr msg = { > - .msg_iov = &vec, > - .msg_iovlen = 1, > - .msg_name = &sa, > - }; > > - msg.msg_namelen = sizeof(sa.sun_family) + strlen(sd_unix_path); > strncpy(sa.sun_path, sd_unix_path, sizeof(sa.sun_path)); > if (sa.sun_path[0] == '@') > sa.sun_path[0] = '\0'; > > say_debug("systemd: sending message '%s'", message); > - ssize_t sent = sendmsg(systemd_fd, &msg, MSG_NOSIGNAL); > + ssize_t sent = sendto(systemd_fd, message, (size_t)strlen(message), > + MSG_NOSIGNAL, (struct sockaddr*)&sa, sizeof(sa)); > if (sent == -1) { > say_syserror("systemd: failed to send message"); > return -1; > -- > 2.21.0 > > > . >