[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-users] Proposed addition to tcp unit
From: |
F. Wittenberger |
Subject: |
Re: [Chicken-users] Proposed addition to tcp unit |
Date: |
Thu, 10 Jul 2008 12:04:57 +0200 |
Am Mittwoch, den 09.07.2008, 23:14 +0200 schrieb Hans Bulfone:
> hi,
>
> On Wed, Jul 09, 2008 at 02:22:45PM +0200, Jörg F. Wittenberger wrote:
> > Hi all,
> >
> > I wanted to control tcp connections from chicken, but handle the actual
> > traffic by an external program.
> >
> > This appears not quite possible with the tcp unit as it stands.
> > tcp-accept starts reading from the accepted connection while my
> > connection handler starves. (Or at worst they will share the traffic in
> > an unpredictable way.)
> >
> > To cope with the situation I added "tcp-get-next-client" (which is
> > incidentally compatible with rscheme's "get-next-client", since that's
> > the code I'm porting).
> >
> > Is this a general useful addition? I'd appreciate if it would it make
> > it into chicken. Will it?
>
> i cannot decide this, but i have a question:
>
> your code looks just like tcp-accept (from chicken 3.1.0) except that
> you return (values fd (##net#getpeername fd)) and tcp-accept returns
> (##net#io-ports fd).
Yes, it's just this slight modification.
> i don't understand why wrapping the fd in scheme ports should read
> anything from the fd if the ports are not used in any way besides
> getting the fd out (which doesn't seem to be possible right now -
> perhaps also a useful addition :)
This is actually possible using port->fileno.
I tried this first and got a valid fd; the writing side (chicken ->
connection handler) did work well. But reading from connection handler
was a mess.
> otoh... ##net#io-ports makes the fd non-blocking
which it should
> and closes them at
> some point so you are probably right, a lower-level function should be
> available that just returns the plain fd. (and tcp-accept should then
> just be (##net#io-ports (tcp-get-next-client-or-something tcpl))
>
> i'd prefer tcp-accept* or tcp-accept/fd over tcp-get-next-client.
Since this is an single, isolated code spot in my 100kLOC to be ported,
I don't mind any name. function first: I want it to fly
/Jörg