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