From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Olivier Dion via General Guile related discussions Newsgroups: gmane.lisp.guile.user Subject: Re: Question about an error with ports Date: Fri, 11 Mar 2022 09:58:59 -0500 Message-ID: <87czisbkng.fsf@laura> References: <3f938fe1-9af4-9076-8d50-d1f7b2ddda36@posteo.de> <87ilslc0gn.fsf@laura> <87fsnpbcbp.fsf@laura> <20220311120500.ad94ea6ad79068dc1f8ff85d@gmail.com> Reply-To: Olivier Dion Mime-Version: 1.0 Content-Type: text/plain Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37431"; mail-complaints-to="usenet@ciao.gmane.io" To: Chris Vine , guile-user@gnu.org Original-X-From: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Fri Mar 11 16:01:07 2022 Return-path: Envelope-to: guile-user@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nSglP-0009ZH-2w for guile-user@m.gmane-mx.org; Fri, 11 Mar 2022 16:01:07 +0100 Original-Received: from localhost ([::1]:41708 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nSglO-0001vR-1a for guile-user@m.gmane-mx.org; Fri, 11 Mar 2022 10:01:06 -0500 Original-Received: from eggs.gnu.org ([209.51.188.92]:51886) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nSgjV-0000w5-80 for guile-user@gnu.org; Fri, 11 Mar 2022 09:59:09 -0500 Original-Received: from smtp.polymtl.ca ([132.207.4.11]:36271) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nSgjS-0001HM-Ej for guile-user@gnu.org; Fri, 11 Mar 2022 09:59:07 -0500 Original-Received: from localhost (modemcable094.169-200-24.mc.videotron.ca [24.200.169.94]) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id 22BEwxnh003565 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Mar 2022 09:59:04 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp.polymtl.ca 22BEwxnh003565 In-Reply-To: <20220311120500.ad94ea6ad79068dc1f8ff85d@gmail.com> X-Poly-FromMTA: (modemcable094.169-200-24.mc.videotron.ca [24.200.169.94]) at Fri, 11 Mar 2022 14:58:59 +0000 Received-SPF: pass client-ip=132.207.4.11; envelope-from=olivier.dion@polymtl.ca; helo=smtp.polymtl.ca X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-user@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Guile related discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-user-bounces+guile-user=m.gmane-mx.org@gnu.org Original-Sender: "guile-user" Xref: news.gmane.io gmane.lisp.guile.user:18185 Archived-At: On Fri, 11 Mar 2022, Chris Vine wrote: > On Thu, 10 Mar 2022 18:46:34 -0500 > Olivier Dion via General Guile related discussions > wrote: >> On Thu, 10 Mar 2022, Zelphir Kaltstahl wrote: >> >> > Just one question: Why is get-bytevector-some better than >> > get-bytevector-n and specifying a number of bytes? >> >> I haven't check the implementation details, but I think it's just a >> question of buffering. `get-bytevector-n` will block just like >> `get-bytevector-some` when the port is empty. The former will return up >> to N bytes and the latter might return more than N bytes. The former >> probably also lead to less memory allocation since N is known in >> advanced, a singled allocation can be made, while the latter might do >> multiple allocations. This can be useful depending on your usage of the >> port. For example, you could make a web server that only accepts HTTP >> body up to 4096 bytes (1 system page). This is what some web server >> does I think. >> >> There's also `get-bytevector-all`, but this would lead to more memory >> usage and multiple allocations. Again, it depends on the usage. > > Avoid using get-bytevector-n!, get-bytevector-some and > get-bytevector-all if you are going to use something like fibers or > some other asynchronous i/o, as those procedures are not suspendable > (they can block). get-bytevector-n (note the difference from > get-bytevector-n!) and get-string-all are suspendable and should > generally be preferred where suspension is required. I'm not sure this is related to the functions themself but instead the underlying filedescriptor opened iwth ON_NONBLOCK? -- Olivier Dion Polymtl