On 18/12/2009, at 9:12 AM, GKern@xxxxxxxxxxxxxxxx wrote:
Is there any way to trap/detect if a data stream is larger than the
what
the socket's input field can handle?
Only if the data stream is structured and contains a length prefix.
That's determined at the application level. TCP doesn't know or care.
You need to receive data from the socket until:
a) Some end-of-data indicator is received
b) Receiver KNOWS all data is received
c) EWOULDBLOCK is received on the socket
d) A timeout occurs on the receive
e) The sender closes the connexion
a) and b) requires agreement between sender and receiver
c) requires the socket be set to non-blocking mode
d) requires the use of select()
Can I extract a portion of the data?
You can read it a byte at a time if you like but of course that's less
efficient. Just read it in chunks of some convenient size.
I ask that since I've been testing receiving data streams over 32k,
but in
debug the data appears as a string of @'s and I'm not sure what's
causing
that. I'm assuming it's 'error' related.
ASCII @ signs have the same hex representation as EBCDIC spaces (at
least in the most common US code pages) so it's likely what you're
seeing is really a bunch of blanks. Note that you can't necessarily
rely on that--it's likely the blanks are there as a result of
initialised storage that hasn't yet had anything written to it. You
should only process the amount of data that recv() indicates was
received.
The numerous things I've tried (including searching the archives and
the
net) have left scratching my head as to how to proceed.
Also I know that QDCXLATE is limited to 32767 bytes. Are there any
alternatives for translating text larger than 32k or should I just
deconstruct and then reconstruct it in 32k chunks?
The iconv suite of functions are the preferred way to convert data
from one CCSID to another.
At the very least I'd like to be able to detect a large string, pull
some
identifiable data out of it and send off an email to the sender
letting
them know I can't handle data stream larger than x bytes long. Does
that
make sense?
No sense at all. A socket program ought to be able to handle however
much data is sent to it.
If you must then simply track the number of bytes received from the
sender and when some arbitrary threshold is reached complain. You'll
still have to receive the rest of what is sent else it will remain for
the next receive operation.
Regards,
Simon Coulter.
--------------------------------------------------------------------
FlyByNight Software OS/400, i5/OS Technical Specialists
http://www.flybynight.com.au/
Phone: +61 2 6657 8251 Mobile: +61 0411 091 400 /"\
Fax: +61 2 6657 8251 \ /
X
ASCII Ribbon campaign against HTML E-Mail / \
--------------------------------------------------------------------
As an Amazon Associate we earn from qualifying purchases.