* asynchronous socket library
@ 2013-07-15 23:41 Aleix Conchillo Flaqué
2013-07-16 1:03 ` Nala Ginrut
` (2 more replies)
0 siblings, 3 replies; 17+ messages in thread
From: Aleix Conchillo Flaqué @ 2013-07-15 23:41 UTC (permalink / raw)
To: guile-user
Hi,
I was wondering if there is (or someone is working on) an asynchronous
socket library for Guile. I was thinking in a pure scheme library (not
bindings for libevent or some other).
Thanks,
Aleix
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
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-17 6:07 ` mark
2 siblings, 1 reply; 17+ messages in thread
From: Nala Ginrut @ 2013-07-16 1:03 UTC (permalink / raw)
To: Aleix Conchillo Flaqué; +Cc: Guile User
[-- Attachment #1: Type: text/plain, Size: 367 bytes --]
在 2013-7-16 AM7:41,"Aleix Conchillo Flaqué" <aconchillo@gmail.com>写道:
>
> Hi,
>
> I was wondering if there is (or someone is working on) an asynchronous
> socket library for Guile. I was thinking in a pure scheme library (not
> bindings for libevent or some other).
>
That would be good!
What do you plan for? IOCP?
> Thanks,
>
> Aleix
>
[-- Attachment #2: Type: text/html, Size: 561 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-16 1:03 ` Nala Ginrut
@ 2013-07-16 1:42 ` Aleix Conchillo Flaqué
0 siblings, 0 replies; 17+ messages in thread
From: Aleix Conchillo Flaqué @ 2013-07-16 1:42 UTC (permalink / raw)
To: Nala Ginrut; +Cc: Guile User
On Mon, Jul 15, 2013 at 6:03 PM, Nala Ginrut <nalaginrut@gmail.com> wrote:
>
> 在 2013-7-16 AM7:41,"Aleix Conchillo Flaqué" <aconchillo@gmail.com>写道:
>
>
>>
>> Hi,
>>
>> I was wondering if there is (or someone is working on) an asynchronous
>> socket library for Guile. I was thinking in a pure scheme library (not
>> bindings for libevent or some other).
>>
>
> That would be good!
> What do you plan for? IOCP?
>
No plans yet. I was just wondering if anyone was working on it.
I still have to read more about it, but it might be a fun one. The
idea just came so I could use it in guile-redis to have non-blocking
calls, some of the redis clients are already asynchronous.
Aleix
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-15 23:41 asynchronous socket library Aleix Conchillo Flaqué
2013-07-16 1:03 ` Nala Ginrut
@ 2013-07-16 6:15 ` Javier Sancho
2013-07-16 7:02 ` Aleix Conchillo Flaqué
2013-07-17 6:07 ` mark
2 siblings, 1 reply; 17+ messages in thread
From: Javier Sancho @ 2013-07-16 6:15 UTC (permalink / raw)
To: Aleix Conchillo Flaqué; +Cc: guile-user
Aleix Conchillo Flaqué wrote:
> I was wondering if there is (or someone is working on) an asynchronous
> socket library for Guile. I was thinking in a pure scheme library (not
> bindings for libevent or some other).
If you don't use libevent, at least you'll need poll, epoll or
something similar. Or how are you planning to monitor activity on a
file descriptor?
--
Javier Sancho Fernández - http://www.jsancho.org/
Associate Member of the Free Software Foundation - http://www.fsf.org/
Contra el DRM - http://www.defectivebydesign.org/what_is_drm
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-16 6:15 ` Javier Sancho
@ 2013-07-16 7:02 ` Aleix Conchillo Flaqué
2013-07-16 7:03 ` Aleix Conchillo Flaqué
` (2 more replies)
0 siblings, 3 replies; 17+ messages in thread
From: Aleix Conchillo Flaqué @ 2013-07-16 7:02 UTC (permalink / raw)
To: Javier Sancho; +Cc: guile-user
On Mon, Jul 15, 2013 at 11:15 PM, Javier Sancho <jsf@jsancho.org> wrote:
> Aleix Conchillo Flaqué wrote:
>> I was wondering if there is (or someone is working on) an asynchronous
>> socket library for Guile. I was thinking in a pure scheme library (not
>> bindings for libevent or some other).
>
> If you don't use libevent, at least you'll need poll, epoll or
> something similar. Or how are you planning to monitor activity on a
> file descriptor?
>
My idea was to create something simple on top of system calls, as
libevent does. This might mean that I need additional system calls
that are not in guile yet. But it doesn't mean I need to create
bindings for libevent (which would probably be smarter if I wanted
something complete). Basilica, the main idea is to learn in the
process.
Aleix
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
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 7:50 ` Thien-Thi Nguyen
2 siblings, 0 replies; 17+ messages in thread
From: Aleix Conchillo Flaqué @ 2013-07-16 7:03 UTC (permalink / raw)
To: Javier Sancho; +Cc: guile-user
On Tue, Jul 16, 2013 at 12:02 AM, Aleix Conchillo Flaqué
<aconchillo@gmail.com> wrote:
> something complete). Basilica, the main idea is to learn in the
Oopsss.... spell checker did a funny thing here. I meant "Basically".
Aleix
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
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 7:50 ` Thien-Thi Nguyen
2 siblings, 1 reply; 17+ messages in thread
From: Chaos Eternal @ 2013-07-16 7:36 UTC (permalink / raw)
To: Aleix Conchillo Flaqué; +Cc: guile-user
i think there is a nio branch for guile?
nio means non-blocking io
On Tue, Jul 16, 2013 at 3:02 PM, Aleix Conchillo Flaqué
<aconchillo@gmail.com> wrote:
> On Mon, Jul 15, 2013 at 11:15 PM, Javier Sancho <jsf@jsancho.org> wrote:
>> Aleix Conchillo Flaqué wrote:
>>> I was wondering if there is (or someone is working on) an asynchronous
>>> socket library for Guile. I was thinking in a pure scheme library (not
>>> bindings for libevent or some other).
>>
>> If you don't use libevent, at least you'll need poll, epoll or
>> something similar. Or how are you planning to monitor activity on a
>> file descriptor?
>>
>
> My idea was to create something simple on top of system calls, as
> libevent does. This might mean that I need additional system calls
> that are not in guile yet. But it doesn't mean I need to create
> bindings for libevent (which would probably be smarter if I wanted
> something complete). Basilica, the main idea is to learn in the
> process.
>
> Aleix
>
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
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 7:50 ` Thien-Thi Nguyen
2013-07-16 15:26 ` Aleix Conchillo Flaqué
2 siblings, 1 reply; 17+ messages in thread
From: Thien-Thi Nguyen @ 2013-07-16 7:50 UTC (permalink / raw)
To: Aleix Conchillo Flaqué; +Cc: guile-user
[-- Attachment #1: Type: text/plain, Size: 524 bytes --]
() Aleix Conchillo Flaqué <aconchillo@gmail.com>
() Tue, 16 Jul 2013 00:02:36 -0700
My idea was to create something simple on top of system calls,
as libevent does.
Have you looked at GNU Serveez?
http://www.gnu.org/software/serveez/
It is relatively simple.
[cc trimmed]
--
Thien-Thi Nguyen
GPG key: 4C807502
(if you're human and you know it)
read my lisp: (responsep (questions 'technical)
(not (via 'mailing-list)))
=> nil
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-16 7:36 ` Chaos Eternal
@ 2013-07-16 15:24 ` Aleix Conchillo Flaqué
2013-07-16 15:58 ` Chaos Eternal
0 siblings, 1 reply; 17+ messages in thread
From: Aleix Conchillo Flaqué @ 2013-07-16 15:24 UTC (permalink / raw)
To: Chaos Eternal; +Cc: guile-user
On Tue, Jul 16, 2013 at 12:36 AM, Chaos Eternal <chaoseternal@shlug.org> wrote:
> i think there is a nio branch for guile?
> nio means non-blocking io
>
Couldn't find it with that name.
Aleix
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-16 7:50 ` Thien-Thi Nguyen
@ 2013-07-16 15:26 ` Aleix Conchillo Flaqué
0 siblings, 0 replies; 17+ messages in thread
From: Aleix Conchillo Flaqué @ 2013-07-16 15:26 UTC (permalink / raw)
To: Thien-Thi Nguyen; +Cc: guile-user
On Tue, Jul 16, 2013 at 12:50 AM, Thien-Thi Nguyen <ttn@gnu.org> wrote:
> () Aleix Conchillo Flaqué <aconchillo@gmail.com>
> () Tue, 16 Jul 2013 00:02:36 -0700
>
> My idea was to create something simple on top of system calls,
> as libevent does.
>
> Have you looked at GNU Serveez?
>
> http://www.gnu.org/software/serveez/
>
> It is relatively simple.
>
No, I didn't know about it, thanks. The other idea of the original
email was to gather some information. I think I have enough to keep me
busy for a while.
Thanks,
Aleix
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-16 15:24 ` Aleix Conchillo Flaqué
@ 2013-07-16 15:58 ` Chaos Eternal
2013-07-16 17:02 ` Aleix Conchillo Flaqué
0 siblings, 1 reply; 17+ messages in thread
From: Chaos Eternal @ 2013-07-16 15:58 UTC (permalink / raw)
To: Aleix Conchillo Flaqué; +Cc: guile-user
http://git.savannah.gnu.org/gitweb/?p=guile.git;a=shortlog;h=refs/heads/wip-ethreads
should be this one
On Tue, Jul 16, 2013 at 11:24 PM, Aleix Conchillo Flaqué
<aconchillo@gmail.com> wrote:
> On Tue, Jul 16, 2013 at 12:36 AM, Chaos Eternal <chaoseternal@shlug.org> wrote:
>> i think there is a nio branch for guile?
>> nio means non-blocking io
>>
>
> Couldn't find it with that name.
>
> Aleix
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-16 15:58 ` Chaos Eternal
@ 2013-07-16 17:02 ` Aleix Conchillo Flaqué
0 siblings, 0 replies; 17+ messages in thread
From: Aleix Conchillo Flaqué @ 2013-07-16 17:02 UTC (permalink / raw)
To: Chaos Eternal; +Cc: guile-user, guile-devel
On Tue, Jul 16, 2013 at 8:58 AM, Chaos Eternal <chaoseternal@shlug.org> wrote:
> http://git.savannah.gnu.org/gitweb/?p=guile.git;a=shortlog;h=refs/heads/wip-ethreads
>
> should be this one
>
Oh, I see now.
Nala Ginrut actually asked about the status of the wip-ethreads branch
earlier this month.
http://lists.gnu.org/archive/html/guile-devel/2013-07/msg00000.html
No replies yet. I'll have a look at it anyway.
Thanks,
Aleix
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-15 23:41 asynchronous socket library Aleix Conchillo Flaqué
2013-07-16 1:03 ` Nala Ginrut
2013-07-16 6:15 ` Javier Sancho
@ 2013-07-17 6:07 ` mark
2013-07-17 7:13 ` Mark H Weaver
2 siblings, 1 reply; 17+ messages in thread
From: mark @ 2013-07-17 6:07 UTC (permalink / raw)
To: guile-user
Aleix Conchillo Flaqué <aconchillo@gmail.com> writes:
> Hi,
>
> I was wondering if there is (or someone is working on) an asynchronous
> socket library for Guile. I was thinking in a pure scheme library (not
> bindings for libevent or some other).
>
> Thanks,
>
> Aleix
>
>
I spent some time working on nonblocking input from a socket for my X
bindings. You can do it in pure Scheme if you're willing to live without
epoll(): Guile includes bindings for both select() and poll() (the
latter is in the undocumented (ice-9 poll) module). I used select()
because it had a section in the manual; I figure it's more "official"
and the docs make it easier for other people to follow the code.
I'm not sure how generally applicable all of my code is since it's
listening specifically for X events and replies, but the way I wait on
the socket looks like this. You have to handle interrupts manually:
(define (file-ready? fd)
(define (do-select)
(select (list fd) '() '() ))
;; ----------------------------^ [SECS] [USECS]
;; You can include an optional timeout in seconds and one in microseconds
(define (on-error . args)
(if (= (system-error-errno args) EINTR)
'(() () ()) ;; This is what select returns when the file's unavailable
(apply throw args)))
(memq fd (car (catch 'system-error do-select on-error))))
(if (file-ready? fd)
... do the file operation ...
... loop or do something else instead ...)
Reading and writing to a socket seems to lend itself well to custom
binary ports, but then I think you're stuck with an opaque buffer -- you
can't properly ask the binary port if the next read beyond one byte will
block or not, since it might have stuff buffered or it might not. I'd
love to be wrong about that if someone happens to know how to check for
the amount remaining in a custom binary port's buffer.
Because of that, my code directly uses recv! every time it wants to read
from the socket, event if it just needs one byte. I don't think that
approach makes for very elegant nonblocking i/o, but it's been
performing well enough.
You can take a look at this for some more ideas (hopefully good ones):
https://github.com/mwitmer/guile-xcb/blob/prompts/xcb/xml/connection.scm
--
Mark Witmer
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-17 6:07 ` mark
@ 2013-07-17 7:13 ` Mark H Weaver
2013-07-17 16:49 ` mark
0 siblings, 1 reply; 17+ messages in thread
From: Mark H Weaver @ 2013-07-17 7:13 UTC (permalink / raw)
To: mark; +Cc: guile-user
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.
> but then I think you're stuck with an opaque buffer -- you
> can't properly ask the binary port if the next read beyond one byte will
> block or not, since it might have stuff buffered or it might not. I'd
> love to be wrong about that if someone happens to know how to check for
> the amount remaining in a custom binary port's buffer.
'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.
Prior to 2.0.9, 'get-bytevector-some' was instead implemented as a loop
that repeatedly called 'char-ready?' and read one byte at a time. This
would drain more than just Guile's buffer; it would try to drain the
upstream buffers as well.
However, 'char-ready?', and thus the pre-2.0.9 'byte-vector-some',
depend upon the port type providing an 'input_waiting' method. File
ports provide this, implemented using 'poll' with 0 timeout, see
fports.c:fport_input_waiting.
Unfortunately, custom binary ports do NOT provide an 'input_waiting'
method, so 'char-ready?' always returns true, and I guess this
ultimately means that the pre-2.0.9 'get-bytevector-some' will block
until it reaches EOF.
So again I ask, why use custom binary ports for sockets?
Regards,
Mark
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-17 7:13 ` Mark H Weaver
@ 2013-07-17 16:49 ` mark
2013-08-24 21:33 ` Mark H Weaver
0 siblings, 1 reply; 17+ messages in thread
From: mark @ 2013-07-17 16:49 UTC (permalink / raw)
To: guile-user
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
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-07-17 16:49 ` mark
@ 2013-08-24 21:33 ` Mark H Weaver
2013-08-25 22:26 ` mark.d.witmer
0 siblings, 1 reply; 17+ messages in thread
From: Mark H Weaver @ 2013-08-24 21:33 UTC (permalink / raw)
To: mark; +Cc: guile-user
Hi Mark,
Sorry for taking so long to respond.
mark@markwitmer.com writes:
> 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.
Guile's native file ports (which also work on sockets) can be used for
binary data as well as character data. There's no need to create a
custom binary port for this purpose. Indeed, the custom ports have
several major disadvantages compared to the native file ports.
>> '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?
Yes, custom ports are needed if the data that's being read is not coming
from a file, pipe, device, socket, string, or bytevector (the cases
covered by Guile's existing native port types; maybe I'm forgetting
some). Similarly for writing.
For example, suppose you wanted a make an input port that reads
keypresses from a GUI interface. In this case, the keypresses are
received via events during the main event loop. There is no underlying
POSIX file descriptor to read from, nor is there a single Scheme string
or bytevector. You could use pipes I suppose, but that assumes POSIX.
Another way is to make a custom port.
In the case of guile-xcb, I see two places where custom ports are used
in auth.scm. Here's the first case:
--8<---------------cut here---------------start------------->8---
(define auth-file (open-file (getenv "XAUTHORITY") "rb"))
(define port
(make-custom-binary-input-port
"xcb-auth-input"
(lambda (bv start count)
(do ((n 0 (1+ n))
(ch (read-char auth-file) (read-char auth-file)))
((or (>= n count) (eof-object? ch)) n)
(bytevector-u8-set!
bv (+ start n) (char->integer ch))))
#f #f (lambda () (close-port port))))
--8<---------------cut here---------------end--------------->8---
First of all, that '(close-port port)' is wrong. Here you are trying to
tell Guile how to close 'port', and this just recurses. I guess it
should be (close-port auth-file)'.
However, I don't see why this custom port is needed at all. You've
already opened 'auth-file' in binary mode, so you should be able to use
it directly, i.e. replace the above code with:
(define port (open-file (getenv "XAUTHORITY") "rb"))
The other case is here (also in auth.scm):
--8<---------------cut here---------------start------------->8---
(define (read! bv start count)
(let* ((in-bv (make-bytevector count))
(bytes-read (recv! sock in-bv)))
(bytevector-copy! in-bv 0 bv start bytes-read)
bytes-read))
(define port (make-custom-binary-input-port "xcb-input" read! #f #f #f))
--8<---------------cut here---------------end--------------->8---
Again, I don't see why this custom port should be needed.
You should be able to use 'sock' directly.
Anyway, thanks for working on this! :)
Regards,
Mark
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: asynchronous socket library
2013-08-24 21:33 ` Mark H Weaver
@ 2013-08-25 22:26 ` mark.d.witmer
0 siblings, 0 replies; 17+ messages in thread
From: mark.d.witmer @ 2013-08-25 22:26 UTC (permalink / raw)
To: guile-user
Mark H Weaver <mhw@netris.org> writes:
>
> First of all, that '(close-port port)' is wrong. Here you are trying to
> tell Guile how to close 'port', and this just recurses. I guess it
> should be (close-port auth-file)'.
That's right. It's two bugs, actually---closing the file would cause an
infinite loop and I didn't catch it because I never actually closed the file!
>
> However, I don't see why this custom port is needed at all. You've
> already opened 'auth-file' in binary mode, so you should be able to use
> it directly, i.e. replace the above code with:
>
> (define port (open-file (getenv "XAUTHORITY") "rb"))
>
Ok, I finally get what you're saying... procedures like
'get-bytevector-n' or 'put-u8' and so forth work just fine on ports that
are opened in binary mode---no custom binary ports needed!
Reading the manual gave me the impression that there was a fundamental
difference between file ports opened in binary mode as described in
section 6.14.9.1, and R6RS binary input/output ports as described in
sections 6.14.10.8 and 6.14.10.11. Now that you've explained it to me,
it makes sense that procedures that call for the latter would work on
the former as well.
--
Mark Witmer
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2013-08-25 22:26 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
2013-08-24 21:33 ` Mark H Weaver
2013-08-25 22:26 ` mark.d.witmer
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).