Jim Davidson
Mon, 18 Jul 2005 16:52:53 -0700
Fred,I was sitting on a bunch of code changes so I added routines to support this and checked it in. Routine is Ns_ConnReturnOpenFdEx which includes an offset arg and uses a pread via new Ns_ConnSendFdEx. Seems to work on a simple test I tried.
I'll send a separate note about the other code changes including some routines to get at the uploaded files in C....
-Jim On Jul 18, 2005, at 5:11 PM, Fred Cox wrote:
--- Jim Davidson <[EMAIL PROTECTED]> wrote: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.Unfortunately, the files I'm using are quite large, so under 32 bit OSes, I don't have the address space to mmap the whole file. A new API would work best for my particular application. If you like, I can do the coding and send you diffs from 4.0.10 and/or the current CVS trunk. Windows does suck in not having pread, but if people want the functionality under Windows, I suppose it could be done by mmap()ing the portion of the file to sent, temporarily. Not being a Windows coder (voluntarily), I'm not sure if there's something special you have to do to use large files. Presumably, the right thing to do is have configure check for pread, and fall back to mmap()ing the portion of the file. Fred-Jim On Jul 12, 2005, at 1:05 AM, Fred Cox wrote:If multiple threads have the same file open, andwouldlike to send portions of it back to the clients, Ns_ConnReturnOpenFd() is close to being useful,but itfails because a seek() must be done before before calling the API. Also, the documentationincorrectlystates that the full file will be sent, ignoringthelength parameter. A version that ultimately uses pread() instead of read() would be useful in this case, but I supposeitdoesn't fit the FILE * paradigm. I don't knowaboutTcl 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 offsetparameterjust for the FD case? Fred____________________________________________________Sell on Yahoo! Auctions – no fees. Bid on greatitems.http://auctions.yahoo.com/ -- AOLserver - http://www.aolserver.com/ To Remove yourself from this list, simply send anemail to<[EMAIL PROTECTED]> with the body of "SIGNOFF AOLSERVER" in the email message.You can leave theSubject: 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.__________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.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.