Re: Advice on streams and bsd sockets

Grant Edwards <[email protected]>
Newsgroups gmane.os.ecos.general
Message-ID <[email protected]>
On 2014-01-21, Michael Jones <[email protected]> wrote:
> I am looking for some advice on using streams with sockets. I am using CYGPKG_NET and taking the socket handle and creating a stream with fdopen(). 
>
> A fwrite() eventually arrives in this code:
>
> static int 
> bsd_lseek(struct CYG_FILE_TAG *fp, off_t *pos, int whence)
> {
>     return ESPIPE;
> }
>
> And this causes an error, but a second call to fwrite() works. It
> always happens when there is a fwrite() immediately after a fread(),
> as that triggers the seek.
>
> I am looking for advice on how to handle this problem.

What I would do is first add a diag_printf() to bsd_lseek() to print
out the paramters so you can see exactly what sort of seek is being
attempted.  You could add a bit of code to bsd_lseek() to check for
(and return success for) "noop" operations (e.g. seek to 0 offset from
current location).

> Of course I could not use streams, but I am working with lua 5.2.3
> and it is based on streams, and don't want to modify it that much. I
> also can't turn off buffering, because lua relies on the ability to
> push bytes back into the stream after reading them.
>
> Does anyone have a patch that works around the problem or know of
> some other way to create a stream that does not rely on seek? In the
> case where I use it, there is no need for seek anyway. I am using the
> stream in place of stdin and stdout so that lua can interact with a
> telnet session.

If the code works OK with stdin/stdout streams, then the lseek() calls
must not be actually doing anything, right?  If that's the case, then
it should be easy enough to modify the the bsd_lseek() function to do
the same.

-- 
Grant Edwards               grant.b.edwards        Yow! I haven't been married
                                  at               in over six years, but we
                              gmail.com            had sexual counseling every
                                                   day from Oral Roberts!!


-- 
Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos
and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.