summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2008-05-21 17:11:04 +0800
committerMatthew Newhook <matthew@zeroc.com>2008-05-21 17:11:04 +0800
commit06e20672108324fa9c2bc688aa9cfca1a586b200 (patch)
tree6bf6164f18dc7f20c638824e965d12aaab57dbf6 /cpp
parenthttp://bugzilla/bugzilla/show_bug.cgi?id=3216 - mcastServer not initialized. (diff)
downloadice-06e20672108324fa9c2bc688aa9cfca1a586b200.tar.bz2
ice-06e20672108324fa9c2bc688aa9cfca1a586b200.tar.xz
ice-06e20672108324fa9c2bc688aa9cfca1a586b200.zip
Some cleanup of the networking code.
Diffstat (limited to 'cpp')
-rw-r--r--cpp/src/Ice/Network.cpp34
-rw-r--r--cpp/src/Ice/Network.h6
-rw-r--r--cpp/src/Ice/TcpAcceptor.cpp6
-rw-r--r--cpp/src/Ice/TcpAcceptor.h9
-rw-r--r--cpp/src/Ice/TcpConnector.h2
-rw-r--r--cpp/src/Ice/UdpTransceiver.cpp11
-rw-r--r--cpp/src/Ice/UdpTransceiver.h4
-rw-r--r--cpp/src/IceSSL/AcceptorI.cpp4
-rw-r--r--cpp/src/IceSSL/AcceptorI.h4
9 files changed, 40 insertions, 40 deletions
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp
index 3bbe962b268..04ed8aeb3c7 100644
--- a/cpp/src/Ice/Network.cpp
+++ b/cpp/src/Ice/Network.cpp
@@ -264,9 +264,11 @@ getLocalAddresses(ProtocolSupport protocol)
return result;
}
-void
-getAddressImpl(const string& host, int port, struct sockaddr_storage& addr, ProtocolSupport protocol, bool server)
+struct sockaddr_storage
+getAddressImpl(const string& host, int port, ProtocolSupport protocol, bool server)
{
+ struct sockaddr_storage addr;
+
//
// We now use getaddrinfo() on Windows.
//
@@ -366,6 +368,7 @@ getAddressImpl(const string& host, int port, struct sockaddr_storage& addr, Prot
throw ex;
}
freeaddrinfo(info);
+ return addr;
}
bool
@@ -373,8 +376,7 @@ isWildcard(const string& host, ProtocolSupport protocol)
{
try
{
- sockaddr_storage addr;
- getAddressImpl(host, 0, addr, protocol, false);
+ sockaddr_storage addr = getAddressImpl(host, 0, protocol, false);
if(addr.ss_family == AF_INET)
{
struct sockaddr_in* addrin = reinterpret_cast<sockaddr_in*>(&addr);
@@ -937,8 +939,7 @@ IceInternal::setMcastGroup(SOCKET fd, const struct sockaddr_storage& group, cons
mreq.imr_interface = getInterfaceAddress(interface);
if(mreq.imr_interface.s_addr == INADDR_ANY)
{
- struct sockaddr_storage addr;
- getAddressForServer(interface, 0, addr, EnableIPv4);
+ struct sockaddr_storage addr = getAddressForServer(interface, 0, EnableIPv4);
mreq.imr_interface = reinterpret_cast<const struct sockaddr_in*>(&addr)->sin_addr;
}
}
@@ -990,8 +991,7 @@ IceInternal::setMcastInterface(SOCKET fd, const string& interface, bool IPv4)
struct in_addr iface = getInterfaceAddress(interface);
if(iface.s_addr == INADDR_ANY)
{
- struct sockaddr_storage addr;
- getAddressForServer(interface, 0, addr, EnableIPv4);
+ struct sockaddr_storage addr = getAddressForServer(interface, 0, EnableIPv4);
iface = reinterpret_cast<const struct sockaddr_in*>(&addr)->sin_addr;
}
rc = setsockopt(fd, IPPROTO_IP, IP_MULTICAST_IF, (char*)&iface, int(sizeof(iface)));
@@ -1075,7 +1075,7 @@ IceInternal::doBind(SOCKET fd, struct sockaddr_storage& addr)
size = 0; // Keep the compiler happy.
}
- if(bind(fd, reinterpret_cast<struct sockaddr*>(&addr), size) == SOCKET_ERROR)
+ if(bind(fd, reinterpret_cast<const struct sockaddr*>(&addr), size) == SOCKET_ERROR)
{
closeSocketNoThrow(fd);
SocketException ex(__FILE__, __LINE__);
@@ -1111,7 +1111,7 @@ repeatListen:
}
bool
-IceInternal::doConnect(SOCKET fd, struct sockaddr_storage& addr)
+IceInternal::doConnect(SOCKET fd, const struct sockaddr_storage& addr)
{
repeatConnect:
int size;
@@ -1129,7 +1129,7 @@ repeatConnect:
size = 0; // Keep the compiler happy.
}
- if(::connect(fd, reinterpret_cast<struct sockaddr*>(&addr), size) == SOCKET_ERROR)
+ if(::connect(fd, reinterpret_cast<const struct sockaddr*>(&addr), size) == SOCKET_ERROR)
{
if(interrupted())
{
@@ -1278,16 +1278,16 @@ repeatAccept:
return ret;
}
-void
-IceInternal::getAddressForServer(const string& host, int port, struct sockaddr_storage& addr, ProtocolSupport protocol)
+struct sockaddr_storage
+IceInternal::getAddressForServer(const string& host, int port, ProtocolSupport protocol)
{
- getAddressImpl(host, port, addr, protocol, true);
+ return getAddressImpl(host, port, protocol, true);
}
-void
-IceInternal::getAddress(const string& host, int port, struct sockaddr_storage& addr, ProtocolSupport protocol)
+struct sockaddr_storage
+IceInternal::getAddress(const string& host, int port, ProtocolSupport protocol)
{
- getAddressImpl(host, port, addr, protocol, false);
+ return getAddressImpl(host, port, protocol, false);
}
vector<struct sockaddr_storage>
diff --git a/cpp/src/Ice/Network.h b/cpp/src/Ice/Network.h
index 8016c05b741..90e8e5e2455 100644
--- a/cpp/src/Ice/Network.h
+++ b/cpp/src/Ice/Network.h
@@ -99,12 +99,12 @@ ICE_API void setReuseAddress(SOCKET, bool);
ICE_API void doBind(SOCKET, struct sockaddr_storage&);
ICE_API void doListen(SOCKET, int);
-ICE_API bool doConnect(SOCKET, struct sockaddr_storage&);
+ICE_API bool doConnect(SOCKET, const struct sockaddr_storage&);
ICE_API void doFinishConnect(SOCKET);
ICE_API SOCKET doAccept(SOCKET);
-ICE_API void getAddressForServer(const std::string&, int, struct sockaddr_storage&, ProtocolSupport);
-ICE_API void getAddress(const std::string&, int, struct sockaddr_storage&, ProtocolSupport);
+ICE_API struct sockaddr_storage getAddressForServer(const std::string&, int, ProtocolSupport);
+ICE_API struct sockaddr_storage getAddress(const std::string&, int, ProtocolSupport);
ICE_API std::vector<struct sockaddr_storage> getAddresses(const std::string&, int, ProtocolSupport, bool);
ICE_API int compareAddress(const struct sockaddr_storage&, const struct sockaddr_storage&);
diff --git a/cpp/src/Ice/TcpAcceptor.cpp b/cpp/src/Ice/TcpAcceptor.cpp
index aab7a740320..18d99100182 100644
--- a/cpp/src/Ice/TcpAcceptor.cpp
+++ b/cpp/src/Ice/TcpAcceptor.cpp
@@ -91,7 +91,8 @@ IceInternal::TcpAcceptor::effectivePort() const
IceInternal::TcpAcceptor::TcpAcceptor(const InstancePtr& instance, const string& host, int port) :
_instance(instance),
_traceLevels(instance->traceLevels()),
- _logger(instance->initializationData().logger)
+ _logger(instance->initializationData().logger),
+ _addr(getAddressForServer(host, port, instance->protocolSupport()))
{
#ifdef SOMAXCONN
_backlog = instance->initializationData().properties->getPropertyAsIntWithDefault("Ice.TCP.Backlog", SOMAXCONN);
@@ -101,7 +102,6 @@ IceInternal::TcpAcceptor::TcpAcceptor(const InstancePtr& instance, const string&
try
{
- getAddressForServer(host, port, _addr, _instance->protocolSupport());
_fd = createSocket(false, _addr.ss_family);
setBlock(_fd, false);
setTcpBufSize(_fd, _instance->initializationData().properties, _logger);
@@ -125,7 +125,7 @@ IceInternal::TcpAcceptor::TcpAcceptor(const InstancePtr& instance, const string&
Trace out(_logger, _traceLevels->networkCat);
out << "attempting to bind to tcp socket " << toString();
}
- doBind(_fd, _addr);
+ doBind(_fd, const_cast<struct sockaddr_storage&>(_addr));
}
catch(...)
{
diff --git a/cpp/src/Ice/TcpAcceptor.h b/cpp/src/Ice/TcpAcceptor.h
index 4971f5df49a..7ef67d0a496 100644
--- a/cpp/src/Ice/TcpAcceptor.h
+++ b/cpp/src/Ice/TcpAcceptor.h
@@ -43,12 +43,13 @@ private:
virtual ~TcpAcceptor();
friend class TcpEndpointI;
- InstancePtr _instance;
- TraceLevelsPtr _traceLevels;
- ::Ice::LoggerPtr _logger;
+ const InstancePtr _instance;
+ const TraceLevelsPtr _traceLevels;
+ const ::Ice::LoggerPtr _logger;
+ const struct sockaddr_storage _addr;
+
SOCKET _fd;
int _backlog;
- struct sockaddr_storage _addr;
};
}
diff --git a/cpp/src/Ice/TcpConnector.h b/cpp/src/Ice/TcpConnector.h
index c38d3eb9b95..8da7c3536bd 100644
--- a/cpp/src/Ice/TcpConnector.h
+++ b/cpp/src/Ice/TcpConnector.h
@@ -47,7 +47,7 @@ private:
const InstancePtr _instance;
const TraceLevelsPtr _traceLevels;
const ::Ice::LoggerPtr _logger;
- struct sockaddr_storage _addr;
+ const struct sockaddr_storage _addr;
const Ice::Int _timeout;
const std::string _connectionId;
};
diff --git a/cpp/src/Ice/UdpTransceiver.cpp b/cpp/src/Ice/UdpTransceiver.cpp
index 66168b1779c..830a14b575c 100644
--- a/cpp/src/Ice/UdpTransceiver.cpp
+++ b/cpp/src/Ice/UdpTransceiver.cpp
@@ -341,13 +341,13 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const s
_logger(instance->initializationData().logger),
_stats(instance->initializationData().stats),
_incoming(true),
- _mcastServer(false),
+ _addr(getAddressForServer(host, port, instance->protocolSupport())),
+ _mcastServer(isMulticast(_addr)),
_connect(connect),
_warn(instance->initializationData().properties->getPropertyAsInt("Ice.Warn.Datagrams") > 0)
{
try
{
- getAddressForServer(host, port, _addr, instance->protocolSupport());
_fd = createSocket(true, _addr.ss_family);
setBufSize(instance);
setBlock(_fd, false);
@@ -367,13 +367,12 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const s
// so we bind to INADDR_ANY (0.0.0.0) instead.
//
struct sockaddr_storage addr;
- getAddressForServer("", getPort(_addr), addr, _addr.ss_family == AF_INET ? EnableIPv4 : EnableIPv6);
+ addr = getAddressForServer("", getPort(_addr), _addr.ss_family == AF_INET ? EnableIPv4 : EnableIPv6);
doBind(_fd, addr);
#else
- doBind(_fd, _addr);
+ doBind(_fd, const_cast<struct sockaddr_storage&>(_addr));
#endif
setMcastGroup(_fd, _addr, mcastInterface);
- _mcastServer = true;
}
else
{
@@ -392,7 +391,7 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const s
//
setReuseAddress(_fd, true);
#endif
- doBind(_fd, _addr);
+ doBind(_fd, const_cast<struct sockaddr_storage&>(_addr));
}
if(_traceLevels->network >= 1)
diff --git a/cpp/src/Ice/UdpTransceiver.h b/cpp/src/Ice/UdpTransceiver.h
index 6a3e5a9b654..05089f8002f 100644
--- a/cpp/src/Ice/UdpTransceiver.h
+++ b/cpp/src/Ice/UdpTransceiver.h
@@ -62,10 +62,10 @@ private:
const Ice::LoggerPtr _logger;
const Ice::StatsPtr _stats;
const bool _incoming;
+ const sockaddr_storage _addr;
+ const bool _mcastServer;
SOCKET _fd;
- struct sockaddr_storage _addr;
- bool _mcastServer;
#ifdef _WIN32
fd_set _rFdSet;
fd_set _wFdSet;
diff --git a/cpp/src/IceSSL/AcceptorI.cpp b/cpp/src/IceSSL/AcceptorI.cpp
index d354532f5d7..5002135cc1e 100644
--- a/cpp/src/IceSSL/AcceptorI.cpp
+++ b/cpp/src/IceSSL/AcceptorI.cpp
@@ -134,7 +134,8 @@ IceSSL::AcceptorI::effectivePort() const
IceSSL::AcceptorI::AcceptorI(const InstancePtr& instance, const string& adapterName, const string& host, int port) :
_instance(instance),
_adapterName(adapterName),
- _logger(instance->communicator()->getLogger())
+ _logger(instance->communicator()->getLogger()),
+ _addr(IceInternal::getAddressForServer(host, port, instance->protocolSupport()))
{
#ifdef SOMAXCONN
_backlog = instance->communicator()->getProperties()->getPropertyAsIntWithDefault("Ice.TCP.Backlog", SOMAXCONN);
@@ -144,7 +145,6 @@ IceSSL::AcceptorI::AcceptorI(const InstancePtr& instance, const string& adapterN
try
{
- IceInternal::getAddressForServer(host, port, _addr, _instance->protocolSupport());
_fd = IceInternal::createSocket(false, _addr.ss_family);
IceInternal::setBlock(_fd, false);
IceInternal::setTcpBufSize(_fd, _instance->communicator()->getProperties(), _logger);
diff --git a/cpp/src/IceSSL/AcceptorI.h b/cpp/src/IceSSL/AcceptorI.h
index afcb6b6abbe..76c218139de 100644
--- a/cpp/src/IceSSL/AcceptorI.h
+++ b/cpp/src/IceSSL/AcceptorI.h
@@ -45,10 +45,10 @@ private:
const InstancePtr _instance;
const std::string _adapterName;
- Ice::LoggerPtr _logger;
+ const Ice::LoggerPtr _logger;
+ struct sockaddr_storage _addr;
SOCKET _fd;
int _backlog;
- struct sockaddr_storage _addr;
};
}