From: mark@markwitmer.com
To: guile-user@gnu.org
Subject: Re: asynchronous socket library
Date: Wed, 17 Jul 2013 09:49:07 -0700 [thread overview]
Message-ID: <87a9ll9loc.fsf@markwitmer.com> (raw)
In-Reply-To: 8738rd1wwy.fsf@tines.lan
Mark H Weaver <mhw@netris.org> writes:
> mark@markwitmer.com writes:
>> Reading and writing to a socket seems to lend itself well to custom
>> binary ports,
>
> Why do you say that? For most purposes, Guile's native file ports are
> superior, and they seem the natural choice for sockets.
>
I over-generalized. In my application, I'm using the X protocol, which
is a binary one. I've been so involved with that I forgot that much of
the time you want to read/write character data from a socket.
> 'get-bytevector-some' from (rnrs io ports) might do what you need. If
> there's at least one byte available it will not block, but in practice
> it reads much more than that (for buffered ports). Guile 2.0.9 has a
> nice fast implementation. Prior to 2.0.9, it was less so.
>
> In more detail: as of 2.0.9, 'get-bytevector-some' will simply copy the
> input buffer managed by Guile into a bytevector and return it. If
> Guile's input buffer is empty, it will try to refill the buffer using
> the port type's 'fill_input' method. For file ports this is
> fports.c:fport_fill_input, and for custom binary ports it's
> r6rs-ports.c:cbip_fill_input.
In order to know if the port has at least one byte ready, you need to be
able to call 'char-ready?', don't you? And as you mentioned, that
doesn't work on custom binary ports. I'm still exploring this part of
Guile so I might not have the details right.
>
> So again I ask, why use custom binary ports for sockets?
>
Thanks for the detailed explanation; I think I'll move away from
them. Were they added just to meet the r6rs spec? Are there any good
uses for custom binary ports that you're aware of?
--
Mark Witmer
next prev parent reply other threads:[~2013-07-17 16:49 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-15 23:41 asynchronous socket library Aleix Conchillo Flaqué
2013-07-16 1:03 ` Nala Ginrut
2013-07-16 1:42 ` Aleix Conchillo Flaqué
2013-07-16 6:15 ` Javier Sancho
2013-07-16 7:02 ` Aleix Conchillo Flaqué
2013-07-16 7:03 ` Aleix Conchillo Flaqué
2013-07-16 7:36 ` Chaos Eternal
2013-07-16 15:24 ` Aleix Conchillo Flaqué
2013-07-16 15:58 ` Chaos Eternal
2013-07-16 17:02 ` Aleix Conchillo Flaqué
2013-07-16 7:50 ` Thien-Thi Nguyen
2013-07-16 15:26 ` Aleix Conchillo Flaqué
2013-07-17 6:07 ` mark
2013-07-17 7:13 ` Mark H Weaver
2013-07-17 16:49 ` mark [this message]
2013-08-24 21:33 ` Mark H Weaver
2013-08-25 22:26 ` mark.d.witmer
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
List information: https://www.gnu.org/software/guile/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87a9ll9loc.fsf@markwitmer.com \
--to=mark@markwitmer.com \
--cc=guile-user@gnu.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).