[omniORB] Problem with large requests (WinNT)
Clarke Brunt
clarke.brunt at yeomannavigation.co.uk
Mon Jul 19 16:50:58 BST 2004
Hello OmniORB list members:
I'm running OmniORB (4.0.1 as it happens - could give 4.0.3 a try if
relevant), on Windows NT.
I'm writing both client and server and want to transfer some long sequences
(or alternatively, structures with long sequences as members). By long, I
mean for example 20 megabytes.
I soon found the giopMaxMsgSize configuration parameter and set it to 32Mb
in both client and server. Transfers up to around 12Mb now work, but
somewhere not far above that, I get an exception. Stepping through the
OmniORB code in the server which is returning the data to the client, I get
to method:
tcpConnection::Send(void* buf, size_t sz,
unsigned long deadline_secs,
unsigned long deadline_nanosecs) {...}
which does:
if ((tx = ::send(pd_socket,(char*)buf,sz,0)) == RC_SOCKET_ERROR) {
if (ERRNO == RC_EINTR)
continue;
else
return -1;
}
else if (tx == 0)
return -1;
For sz somewhere above 12Mb, ::send returns -1 (which I guess is
RC_SOCKET_ERROR), which causes the Omni code to throw the exception.
I'm no expert on TCP programming at this level. Is WinNT likely to have some
limit on the size of a single send? I see that the method includes some code
under #ifdef __VMS which limits each send to 64Kb, so the VMS OS appears to
have such a limit.
Any advice welcome (even if it's to say that I shouldn't be trying to send
so much in a single request!).
--
Clarke Brunt, Principal Software Engineer, Yeoman Navigation
More information about the omniORB-list
mailing list