From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on atuin.qyliss.net X-Spam-Level: X-Spam-Status: No, score=-4.5 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 Received: by atuin.qyliss.net (Postfix, from userid 496) id EB7D78481; Fri, 19 Mar 2021 03:02:15 +0000 (UTC) Received: from [127.0.0.1] (localhost [IPv6:::1]) by atuin.qyliss.net (Postfix) with ESMTP id 0B1A58421; Fri, 19 Mar 2021 03:02:08 +0000 (UTC) Received: by atuin.qyliss.net (Postfix, from userid 496) id 5928E841C; Fri, 19 Mar 2021 03:02:06 +0000 (UTC) Received: from out3-smtp.messagingengine.com (out3-smtp.messagingengine.com [66.111.4.27]) by atuin.qyliss.net (Postfix) with ESMTPS id 1261383C8 for ; Fri, 19 Mar 2021 03:02:04 +0000 (UTC) Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id 7E0825C00E9 for ; Thu, 18 Mar 2021 23:02:03 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Thu, 18 Mar 2021 23:02:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=alyssa.is; h= from:to:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; s=fm2; bh=E+o8fM2uxnF3/ yQcGDc1TMvJ9L7Vg9YNNW/yF/Ij5NQ=; b=acJZHelz6t+R3cS4v99F+JQmRncKi zypnFcfbiYIAdLoww/YJbzO9anT41pCZ+L7RYZ8fXA9/rPWRkX7Hkpfbn2PUH1gP sZ/l7NW9Q2BjEWUo4NstHyBYKv+xsiBJLZrOrSZL/YOLv4+eogUgWgFo/aA6fp8s 1QOy0WIIHW9arDUNYQLOjDKsx8K5FIkY/k1MKFjRqj54EXwDivtNEkG47maj/IOW IeSD59AImep5ROStHwDwezorP9U9wTEZZt/xUyF0S/1Eehsmaa9VKu1+UE5qRhPI P4iJb3ZvJQ6FARYfuz5IxuIRa2fQf/rkUzSblPb1MNQISUJpZwASOhLKA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:date:from :in-reply-to:message-id:mime-version:references:subject:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm2; bh=E+o8fM2uxnF3/yQcGDc1TMvJ9L7Vg9YNNW/yF/Ij5NQ=; b=Bq36leVV ixc+VkMKBj+zKgzyhNJwZpx+28+TGA4P1hz92jWa+ULP8xqGrUftL10Rwe/Q/V9d kXzgcFxqDPdHM6A5QhAfWg1BZHwM633iKi9ef+Dt8nbWITv9Dp+4cQLP//lnnQTQ janPMs2v/o3xlvtKY6qlFRqsDqJqaSEiYZLxxJjBDl/9sY+i2ujlpc15WnT2zKOb yFDonDtORP8kWR8Hu5VIyejtEK98UbkK0wDdeoLws9+yRoDC7URaZbTeWhefL+89 HRfLp4ugf0U06dmk4Gi7rfDmem5PBJ/h3V0GuCv+YDMJ8PgzAjpb3Abn3MlIVRiT 80wZYajlxSxDNw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudefjedghedvucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefhvffufffkofgjfhgggfestdekre dtredttdenucfhrhhomheptehlhihsshgrucftohhsshcuoehhihesrghlhihsshgrrdhi sheqnecuggftrfgrthhtvghrnhepgfefudekvdelieelledufeevheeglefggedvudejvd dtffeuueevffehleejkedvnecukfhppeekgedrudekgedrvdefvddrudektdenucevlhhu shhtvghrufhiiigvpedvnecurfgrrhgrmhepmhgrihhlfhhrohhmpehqhihlihhsshesgi dvvddtrdhqhihlihhsshdrnhgvth X-ME-Proxy: Received: from x220.qyliss.net (p54b8e8b4.dip0.t-ipconnect.de [84.184.232.180]) by mail.messagingengine.com (Postfix) with ESMTPA id 5AD791080067 for ; Thu, 18 Mar 2021 23:02:03 -0400 (EDT) Received: by x220.qyliss.net (Postfix, from userid 1000) id 77D821EAB; Fri, 19 Mar 2021 03:02:02 +0000 (UTC) From: Alyssa Ross To: devel@spectrum-os.org Subject: [PATCH ucspi-vsock 3/7] vsockserver: switch to a non-blocking socket Date: Fri, 19 Mar 2021 02:56:47 +0000 Message-Id: <20210319025648.17925-3-hi@alyssa.is> X-Mailer: git-send-email 2.30.0 In-Reply-To: <20210319025349.8839-2-hi@alyssa.is> References: <20210319025349.8839-2-hi@alyssa.is> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Message-ID-Hash: YQ73TSTSPGUNS4FAY2OYRQQUITYJYEYJ X-Message-ID-Hash: YQ73TSTSPGUNS4FAY2OYRQQUITYJYEYJ X-MailFrom: qyliss@x220.qyliss.net X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.3.1 Precedence: list List-Id: Patches and low-level development discussion Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: This is entirely an implementation detail, for the moment, but it becomes important when we split out vsockserver into two seperate programs, one for binding the socket, and one for accepting, like s6-networking. Non-blocking sockets are the default there, so it makes sense to share that behaviour. I added the comment about blockingness of the connection sockets just in case, but for now Linux is the only Unix with an AF_VSOCK implementation, so I don't expect it to become relevant any time soon. --- vsockserver.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/vsockserver.c b/vsockserver.c index 58cd063..43307d2 100644 --- a/vsockserver.c +++ b/vsockserver.c @@ -4,7 +4,9 @@ #define _GNU_SOURCE #include +#include #include +#include #include #include #include @@ -33,7 +35,7 @@ noreturn static void ex_usage(void) int main(int argc, char *argv[]) { bool notify = false; - int opt, conn; + int opt; pid_t child; uint32_t lcid, lport, rcid, rport; @@ -73,6 +75,9 @@ int main(int argc, char *argv[]) if (fd == -1) diee(EX_OSERR, "socket"); + if (fcntl(fd, F_SETFL, O_NONBLOCK) == -1) + diee(EX_OSERR, "fcntl"); + if (vsock_bind(fd, lcid, lport) == -1) diee(EX_OSERR, "bind"); @@ -93,7 +98,16 @@ int main(int argc, char *argv[]) ilog("listening as %" PRIu32 " on port %" PRIu32, lcid, lport); - while ((conn = vsock_accept(fd, &rcid, &rport)) != -1) { + struct pollfd poll_fd = { .fd = fd, .events = POLL_IN, .revents = 0 }; + while (poll(&poll_fd, 1, -1) != -1) { + // On Linux, conn will be blocking. On other + // platforms, this may not be the case. If other + // platforms are to be supported, we'd probably want + // to set O_NONBLOCK here. + int conn = vsock_accept(fd, &rcid, &rport); + if (conn == -1) + diee(EX_OSERR, "accept"); + setenvf("VSOCKREMOTECID", 1, "%" PRIu32, rcid); setenvf("VSOCKREMOTEPORT", 1, "%" PRIu32, rport); @@ -117,5 +131,5 @@ int main(int argc, char *argv[]) close(conn); } - diee(EX_OSERR, "accept"); + diee(EX_OSERR, "poll"); } -- 2.30.0