[ http://issues.apache.org/jira/browse/AXISCPP-847?page=comments#action_12331695 ]
Ernst Mikkelsen commented on AXISCPP-847: ----------------------------------------- Your assumption is correct. The problem occurs when the client is run from the CL command line. Axis C++ does NOT define INVALID_SOCKET when WIN32 is defined, so the value can safely be changed to -1, as I see it. I have found INVALID_SOCKET defined in the following header/source files (FYI): ./src/transport/axis2/Channel.h ./src/transport/axis3/HTTPChannel/HTTPChannel.hpp ./src/transport/axis3/HTTPSSLChannel/HTTPSSLChannel.hpp ./tests/utils/simple-server-client/cli.cpp ./tests/utils/simple-server-client/serv.cpp > Wrong definition of INVALID_SOCKET for non MS Windows platforms. > ---------------------------------------------------------------- > > Key: AXISCPP-847 > URL: http://issues.apache.org/jira/browse/AXISCPP-847 > Project: Axis-C++ > Type: Bug > Components: Transport (axis3) > Versions: 1.5 Final > Environment: i5/OS (OS/400 iSeries) and *nix (Linux and others) > Reporter: Ernst Mikkelsen > Assignee: nadir amra > Priority: Critical > > In HTTPChannel.hpp and HTTPSSLChannel.hpp, INVALID_SOCKET is defined as 0 > (zero). This causes a client using Axis C++ to fail consequently with a > HTTPTransportException on the first connection attempt on the i5/OS, because > 0 (zero) in fact is a valid socket descriptor on the i5/OS platform (as well > as it is on other platforms such as Linux). This also means that real errors > are not caught because -1 from the API is compared with to a 0 (zero). > To my knowledge, all platforms defines socket() to return either -1 or ~0 > depending on whether socket() is implemented with a signed or unsigned return > value. > My suggestion would be to change the following two files: > HTTPChannel.hpp line 56 in Axis C++ 1.5 Final > HTTPSSLChannel.hpp line 58 in Axis C++ 1.5 Final > from: const unsigned int INVALID_SOCKET = 0; > to: const unsigned int INVALID_SOCKET = ~0; // for unsigned socket() > implementations > or: const int INVALID_SOCKET = -1; // for signed socket() > implementations > As a workaround for this issue, I've tried to allocate a dummy socket in my > client program before calling any of the Axis C++ methods, causing Axis C++ > to succeed on the first connection attempt. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
