[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