Archived
This forum has been archived. Please start a new discussion on GitHub.
Ice 2.1.2 / 3.0.0 on OpenSUSE 10
Hi,
I've been a lurker in the realm of ICE for quite some time now. I've installed ICE 2.1.2 locally and played with the examples coming with the distribution and in Connections, but haven't tried much more (yet). After upgrading my system from SuSE 9.2 to OpenSUSE 10, and after the announcement of ICE 3.0.0, I'm now pushing myself to dig into the matter more deeply. And I run into trouble, e.g., for starters I just can't make ICE 3.0.0 behave like ICE 2.1.2 out-of-the-box.
My setup is as follows:
~/.bashrc exports the following entries
ICE_LOCAL=$HOME/Work/Ice
ICE_HOME=$ICE_LOCAL/Ice
(which is a softlink to either Ice-2.1.2 or Ice-3.0.0)
ICEJ_HOME=$ICE_LOCAL/IceJ
(which is a softlink to either IceJ-2.1.2 or IceJ-3.0.0)
ICEPY_HOME=$ICE_LOCAL/IcePy
(which is a softlink to either IcePy-2.1.2 or IcePy-3.0.0)
PATH=$ICE_HOME/bin:$PATH
LD_LIBRARY_PATH=$ICE_HOME/lib:$LD_LIBRARY_PATH
CLASSPATH=$ICEJ_HOME/lib/Ice.jar:$CLASSPATH
PYTHONPATH=$ICEPY_HOME/lib:$ICEPY_HOME/python:$PYTHONPATH
/etc/hosts has the entries (created by the OpenSUSE installation)
127.0.0.1 localhost
127.0.0.2 linux.site linux
The six archives for Ice-C++, Ice-Java, Ice-Python are extracted in $ICE_LOCAL, and three softlinks pointing to the top-directories for C++, Java, and Python are set (a) for version 2.1.2, xor (b) for version 3.0.0. The two C++ code bases compile fine with g++ 4.0.2 (IceJ-2.1.2 fails, because my current setup only has Berkeley DB 4.3.27, but not 4.2.52 installed; IcePy-2.1.2 works fine), but when I try the initial example ./demo/book/printer, I get differing results.
When I set a softlink from $ICE_LOCAL/Ice-2.1.2 to $ICE_LOCAL/Ice and enter $ICE_HOME/demo/book/printer, the invocation
$ ./server --Ice.Trace.Network=2
replies with the output
Network: attempting to bind to tcp socket 127.0.0.2:10000
Network: accepting tcp connections at 127.0.0.2: 10000
In another shell I invoke
$ ./client --Ice.Trace.Network=2
which gives
Network: trying to establish tcp connection to 127.0.0.2:10000
Netwok: tcp connection established
local address = 127.0.0.2:28551
remote address = 127.0.0.2: 10000
and ships "Hello world" to the server shell. Fine.
But when I try to do the same after setting the softlink "Ice" from $ICE_LOCAL/Ice-2.1.2 to $ICE_LOCAL/Ice-3.0.0, the situation is different. Now, the invocation in $ICE_HOME/demo/book/printer
./server --Ice.Trace.Network=2
gives the differing output
Network: attempting to bind to tcp socket 127.0.0.1:10000
Network: accepting tcp connections at 127.0.0.1: 10000
i.e., the server talks over "localhost" instead of "linux". The client invocation (after "cd $ICE_HOME/demo/book/printer" into the 3.0.0 package path)
./client --Ice.Trace.Network=2
gives
Network: trying to establish tcp connection to 127.0.0.2:1000
twice, plus
Network.cpp:669: Ice::ConnectionRefusedException:
connection refused: Connection refused
The examples codes are identical (untouched after extracting the source archives) and compiled out-of-the-box. So, I'm stuck and would appreciate your help with the upgrade. Afterwards, I'll get to the Java and Python parts.
Thanks in advance
I've been a lurker in the realm of ICE for quite some time now. I've installed ICE 2.1.2 locally and played with the examples coming with the distribution and in Connections, but haven't tried much more (yet). After upgrading my system from SuSE 9.2 to OpenSUSE 10, and after the announcement of ICE 3.0.0, I'm now pushing myself to dig into the matter more deeply. And I run into trouble, e.g., for starters I just can't make ICE 3.0.0 behave like ICE 2.1.2 out-of-the-box.
My setup is as follows:
~/.bashrc exports the following entries
ICE_LOCAL=$HOME/Work/Ice
ICE_HOME=$ICE_LOCAL/Ice
(which is a softlink to either Ice-2.1.2 or Ice-3.0.0)
ICEJ_HOME=$ICE_LOCAL/IceJ
(which is a softlink to either IceJ-2.1.2 or IceJ-3.0.0)
ICEPY_HOME=$ICE_LOCAL/IcePy
(which is a softlink to either IcePy-2.1.2 or IcePy-3.0.0)
PATH=$ICE_HOME/bin:$PATH
LD_LIBRARY_PATH=$ICE_HOME/lib:$LD_LIBRARY_PATH
CLASSPATH=$ICEJ_HOME/lib/Ice.jar:$CLASSPATH
PYTHONPATH=$ICEPY_HOME/lib:$ICEPY_HOME/python:$PYTHONPATH
/etc/hosts has the entries (created by the OpenSUSE installation)
127.0.0.1 localhost
127.0.0.2 linux.site linux
The six archives for Ice-C++, Ice-Java, Ice-Python are extracted in $ICE_LOCAL, and three softlinks pointing to the top-directories for C++, Java, and Python are set (a) for version 2.1.2, xor (b) for version 3.0.0. The two C++ code bases compile fine with g++ 4.0.2 (IceJ-2.1.2 fails, because my current setup only has Berkeley DB 4.3.27, but not 4.2.52 installed; IcePy-2.1.2 works fine), but when I try the initial example ./demo/book/printer, I get differing results.
When I set a softlink from $ICE_LOCAL/Ice-2.1.2 to $ICE_LOCAL/Ice and enter $ICE_HOME/demo/book/printer, the invocation
$ ./server --Ice.Trace.Network=2
replies with the output
Network: attempting to bind to tcp socket 127.0.0.2:10000
Network: accepting tcp connections at 127.0.0.2: 10000
In another shell I invoke
$ ./client --Ice.Trace.Network=2
which gives
Network: trying to establish tcp connection to 127.0.0.2:10000
Netwok: tcp connection established
local address = 127.0.0.2:28551
remote address = 127.0.0.2: 10000
and ships "Hello world" to the server shell. Fine.
But when I try to do the same after setting the softlink "Ice" from $ICE_LOCAL/Ice-2.1.2 to $ICE_LOCAL/Ice-3.0.0, the situation is different. Now, the invocation in $ICE_HOME/demo/book/printer
./server --Ice.Trace.Network=2
gives the differing output
Network: attempting to bind to tcp socket 127.0.0.1:10000
Network: accepting tcp connections at 127.0.0.1: 10000
i.e., the server talks over "localhost" instead of "linux". The client invocation (after "cd $ICE_HOME/demo/book/printer" into the 3.0.0 package path)
./client --Ice.Trace.Network=2
gives
Network: trying to establish tcp connection to 127.0.0.2:1000
twice, plus
Network.cpp:669: Ice::ConnectionRefusedException:
connection refused: Connection refused
The examples codes are identical (untouched after extracting the source archives) and compiled out-of-the-box. So, I'm stuck and would appreciate your help with the upgrade. Afterwards, I'll get to the Java and Python parts.
Thanks in advance
0
Comments
-
Hi Andreas,
I am sure the issue you are seeing is related to the following change made in Ice 3.0.0:
- Ice will now listen on all local interfaces if no -h parameter is
present in the endpoint configuration and no default host has been
set. It will also listen to all interfaces if the -h parameter is
set to 0.0.0.0. In such configurations the endpoints published in
proxies will not contain the loopback interface (127.0.0.1) unless
it is the only local interface present.
In Ice 2.1.2 if no host was specified for a endpoint, it would just use the host returned by gethostname(). With Ice 3.0.0 if no host is sepcified, it will attempt to bind to all local interfaces (which on linux are obtained using getifaddrs()).
From the tracing you have posted, it appears that in your setup the list of interfaces returned by getifaddrs() only contains 127.0.0.1, whereas gethostname() returns 127.0.0.2. I will look into this further.
Meanwhile you can either add -h <host> params in the endpoint setting in your config files or start your programs with a --Ice.Default.Host=<host> command line option to set the default host.
Regards,
Dwayne0 -
Thank you, Dwayne, for the immediate response. With the server option
--Ice.Default.Host=linux
all is fine. The C++ and Java servers/clients talk with each other, and the Python 'hello' example works as well.
Thanks again!0