[omniORB] Major concurrency issue on Windows (OmniORB 4.0.1)

Kamaldeep Singh Khanuja Kkhanuja at quark.co.in
Thu Sep 11 11:56:45 BST 2003


Hi Duncan,
Our application is a server application (uses OmniORB 4.0.1) where large
number of clients (usually greater than 300) connect to our server. On the
Windows version of this server, we have noticed that if there are more than
64 concurrent IDL (i.e. 64 socket connections opened with server) calls
pending on the server, the 65th IDL call from any other client application
blocks and the server stops responding there after. Upon investigating we
found that it is due to the limit specified in winsock2.h by using the
preprocessor macro FD_SETSIZE. By default it is 64, so I introduced the
following before winsock2.h is included in the OmniORB code:

// Should be moved to some Common place
// This is to support the Winsock implementation to support non-default
number of 
// open sockets for an application. [Default limit is 64]
#undef FD_SETSIZE
#define FD_SETSIZE 2048

The above was done at two places:
1) src\lib\omniORB\orbcore\tcp\tcpTransportImpl.cc
2) include\omniORB4\internal\libcWrapper.h

After this I compiled the ORB and it worked fine for us!!!

I think it would make sense to include this change for Windows in the ORB
distribution. This could remain hard-coded to 2048 or be made configurable
using a makefile macro.

Best Regards,
--Kamal



More information about the omniORB-list mailing list