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 E04CB24F54 for ; Tue, 20 Aug 2019 08:01:11 -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 XHdrSSSdCWiJ for ; Tue, 20 Aug 2019 08:01:11 -0400 (EDT) Received: from smtp49.i.mail.ru (smtp49.i.mail.ru [94.100.177.109]) (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 7734B24FE6 for ; Tue, 20 Aug 2019 08:01:11 -0400 (EDT) From: "Max Melentiev" (Redacted sender "m.melentiev" for DMARC) Subject: [tarantool-patches] [PATCH] Replace sendmsg with sendto shortcut Date: Tue, 20 Aug 2019 15:01:02 +0300 Message-Id: <20190820120102.60158-1-m.melentiev@corp.mail.ru> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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: Max Melentiev 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