Hi,
You're right -- it's not thread safe. Two options:
1. Add the offset & length parameters and have the server use pread
as you suggest (not sure about the equivalent on win32). I suppose
this would technically not be backward compatible in case someone was
expecting the current seek position to change as a result of the call
so perhaps a new API such as Ns_ConnReturnSharedFd may make more sense.
2. Mmap the file and allow multiple threads to use
Ns_ConnReturnData. You should be able to do this in user code now.
-Jim
On Jul 12, 2005, at 1:05 AM, Fred Cox wrote:
If multiple threads have the same file open, and would
like to send portions of it back to the clients,
Ns_ConnReturnOpenFd() is close to being useful, but it
fails because a seek() must be done before before
calling the API. Also, the documentation incorrectly
states that the full file will be sent, ignoring the
length parameter.
A version that ultimately uses pread() instead of
read() would be useful in this case, but I suppose it
doesn't fit the FILE * paradigm. I don't know about
Tcl channels, so I can't say whether it makes from
that perspective.
For now, I'm working around this by reading the
portion of the file into a buffer on the stack and
doing Ns_ConnReturnData().
Would it be worth while to append an offset parameter
just for the FD case?
Fred
____________________________________________________
Sell on Yahoo! Auctions – no fees. Bid on great items.
http://auctions.yahoo.com/
--
AOLserver - http://www.aolserver.com/
To Remove yourself from this list, simply send an email to
<[EMAIL PROTECTED]> with the
body of "SIGNOFF AOLSERVER" in the email message. You can leave the
Subject: field of your email blank.
--
AOLserver - http://www.aolserver.com/
To Remove yourself from this list, simply send an email to <[EMAIL PROTECTED]>
with the
body of "SIGNOFF AOLSERVER" in the email message. You can leave the Subject:
field of your email blank.