summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/UdpTransceiver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/UdpTransceiver.cpp')
-rw-r--r--cpp/src/Ice/UdpTransceiver.cpp460
1 files changed, 230 insertions, 230 deletions
diff --git a/cpp/src/Ice/UdpTransceiver.cpp b/cpp/src/Ice/UdpTransceiver.cpp
index f7e26883e38..4853d98aaa9 100644
--- a/cpp/src/Ice/UdpTransceiver.cpp
+++ b/cpp/src/Ice/UdpTransceiver.cpp
@@ -33,8 +33,8 @@ IceInternal::UdpTransceiver::close()
{
if(_traceLevels->network >= 1)
{
- Trace out(_logger, _traceLevels->networkCat);
- out << "closing udp connection\n" << toString();
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "closing udp connection\n" << toString();
}
assert(_fd != INVALID_SOCKET);
@@ -52,8 +52,8 @@ IceInternal::UdpTransceiver::shutdownReadWrite()
{
if(_traceLevels->network >= 2)
{
- Trace out(_logger, _traceLevels->networkCat);
- out << "shutting down udp connection for reading and writing\n" << toString();
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "shutting down udp connection for reading and writing\n" << toString();
}
//
@@ -84,10 +84,10 @@ IceInternal::UdpTransceiver::shutdownReadWrite()
//
if(!_connect)
{
- struct sockaddr_in unspec;
- memset(&unspec, 0, sizeof(unspec));
- unspec.sin_family = AF_UNSPEC;
- ::connect(_fd, reinterpret_cast<struct sockaddr*>(&unspec), int(sizeof(unspec)));
+ struct sockaddr_in unspec;
+ memset(&unspec, 0, sizeof(unspec));
+ unspec.sin_family = AF_UNSPEC;
+ ::connect(_fd, reinterpret_cast<struct sockaddr*>(&unspec), int(sizeof(unspec)));
}
//
@@ -117,10 +117,10 @@ IceInternal::UdpTransceiver::write(Buffer& buf, int)
const int packetSize = min(_maxPacketSize, _sndSize - _udpOverhead);
if(packetSize < static_cast<int>(buf.b.size()))
{
- //
- // We don't log a warning here because the client gets an exception anyway.
- //
- throw DatagramLimitException(__FILE__, __LINE__);
+ //
+ // We don't log a warning here because the client gets an exception anyway.
+ //
+ throw DatagramLimitException(__FILE__, __LINE__);
}
repeat:
@@ -128,62 +128,62 @@ repeat:
assert(_fd != INVALID_SOCKET);
#ifdef _WIN32
ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]),
- static_cast<int>(buf.b.size()), 0);
+ static_cast<int>(buf.b.size()), 0);
#else
ssize_t ret = ::send(_fd, reinterpret_cast<const char*>(&buf.b[0]),
- buf.b.size(), 0);
+ buf.b.size(), 0);
#endif
if(ret == SOCKET_ERROR)
{
- if(interrupted())
- {
- goto repeat;
- }
+ if(interrupted())
+ {
+ goto repeat;
+ }
- if(wouldBlock())
- {
- repeatSelect:
+ if(wouldBlock())
+ {
+ repeatSelect:
- assert(_fd != INVALID_SOCKET);
+ assert(_fd != INVALID_SOCKET);
#ifdef _WIN32
- FD_SET(_fd, &_wFdSet);
- int rs = ::select(static_cast<int>(_fd + 1), 0, &_wFdSet, 0, 0);
+ FD_SET(_fd, &_wFdSet);
+ int rs = ::select(static_cast<int>(_fd + 1), 0, &_wFdSet, 0, 0);
#else
- struct pollfd fdSet[1];
- fdSet[0].fd = _fd;
- fdSet[0].events = POLLOUT;
- int rs = ::poll(fdSet, 1, -1);
+ struct pollfd fdSet[1];
+ fdSet[0].fd = _fd;
+ fdSet[0].events = POLLOUT;
+ int rs = ::poll(fdSet, 1, -1);
#endif
- if(rs == SOCKET_ERROR)
- {
- if(interrupted())
- {
- goto repeatSelect;
- }
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
-
- goto repeat;
- }
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
+ if(rs == SOCKET_ERROR)
+ {
+ if(interrupted())
+ {
+ goto repeatSelect;
+ }
+
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+
+ goto repeat;
+ }
+
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
}
if(_traceLevels->network >= 3)
{
- Trace out(_logger, _traceLevels->networkCat);
- out << "sent " << ret << " bytes via udp\n" << toString();
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "sent " << ret << " bytes via udp\n" << toString();
}
if(_stats)
{
- _stats->bytesSent(type(), static_cast<Int>(ret));
+ _stats->bytesSent(type(), static_cast<Int>(ret));
}
assert(ret == static_cast<ssize_t>(buf.b.size()));
@@ -203,16 +203,16 @@ IceInternal::UdpTransceiver::read(Buffer& buf, int)
const int packetSize = min(_maxPacketSize, _rcvSize - _udpOverhead);
if(packetSize < static_cast<int>(buf.b.size()))
{
- //
- // We log a warning here because this is the server side -- without the
- // the warning, there would only be silence.
- //
- if(_warn)
- {
- Warning out(_logger);
- out << "DatagramLimitException: maximum size of " << packetSize << " exceeded";
- }
- throw DatagramLimitException(__FILE__, __LINE__);
+ //
+ // We log a warning here because this is the server side -- without the
+ // the warning, there would only be silence.
+ //
+ if(_warn)
+ {
+ Warning out(_logger);
+ out << "DatagramLimitException: maximum size of " << packetSize << " exceeded";
+ }
+ throw DatagramLimitException(__FILE__, __LINE__);
}
buf.b.resize(packetSize);
buf.i = buf.b.begin();
@@ -223,107 +223,107 @@ repeat:
// Check the shutdown flag.
//
{
- IceUtil::Mutex::Lock sync(_shutdownReadWriteMutex);
- if(_shutdownReadWrite)
- {
- throw ConnectionLostException(__FILE__, __LINE__);
- }
+ IceUtil::Mutex::Lock sync(_shutdownReadWriteMutex);
+ if(_shutdownReadWrite)
+ {
+ throw ConnectionLostException(__FILE__, __LINE__);
+ }
}
ssize_t ret;
if(_connect)
{
- //
- // If we must connect, then we connect to the first peer that
- // sends us a packet.
- //
- struct sockaddr_in peerAddr;
- memset(&peerAddr, 0, sizeof(struct sockaddr_in));
- socklen_t len = static_cast<socklen_t>(sizeof(peerAddr));
- assert(_fd != INVALID_SOCKET);
- ret = recvfrom(_fd, reinterpret_cast<char*>(&buf.b[0]), packetSize,
- 0, reinterpret_cast<struct sockaddr*>(&peerAddr), &len);
- if(ret != SOCKET_ERROR)
- {
- doConnect(_fd, peerAddr, -1);
- _connect = false; // We are connected now.
-
- if(_traceLevels->network >= 1)
- {
- Trace out(_logger, _traceLevels->networkCat);
- out << "connected udp socket\n" << toString();
- }
- }
+ //
+ // If we must connect, then we connect to the first peer that
+ // sends us a packet.
+ //
+ struct sockaddr_in peerAddr;
+ memset(&peerAddr, 0, sizeof(struct sockaddr_in));
+ socklen_t len = static_cast<socklen_t>(sizeof(peerAddr));
+ assert(_fd != INVALID_SOCKET);
+ ret = recvfrom(_fd, reinterpret_cast<char*>(&buf.b[0]), packetSize,
+ 0, reinterpret_cast<struct sockaddr*>(&peerAddr), &len);
+ if(ret != SOCKET_ERROR)
+ {
+ doConnect(_fd, peerAddr, -1);
+ _connect = false; // We are connected now.
+
+ if(_traceLevels->network >= 1)
+ {
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "connected udp socket\n" << toString();
+ }
+ }
}
else
{
- assert(_fd != INVALID_SOCKET);
- ret = ::recv(_fd, reinterpret_cast<char*>(&buf.b[0]), packetSize, 0);
+ assert(_fd != INVALID_SOCKET);
+ ret = ::recv(_fd, reinterpret_cast<char*>(&buf.b[0]), packetSize, 0);
}
if(ret == SOCKET_ERROR)
{
- if(interrupted())
- {
- goto repeat;
- }
-
- if(wouldBlock())
- {
- repeatSelect:
-
- assert(_fd != INVALID_SOCKET);
+ if(interrupted())
+ {
+ goto repeat;
+ }
+
+ if(wouldBlock())
+ {
+ repeatSelect:
+
+ assert(_fd != INVALID_SOCKET);
#ifdef _WIN32
- FD_SET(_fd, &_rFdSet);
- int rs = ::select(static_cast<int>(_fd + 1), &_rFdSet, 0, 0, 0);
+ FD_SET(_fd, &_rFdSet);
+ int rs = ::select(static_cast<int>(_fd + 1), &_rFdSet, 0, 0, 0);
#else
- struct pollfd fdSet[1];
- fdSet[0].fd = _fd;
- fdSet[0].events = POLLIN;
- int rs = ::poll(fdSet, 1, -1);
+ struct pollfd fdSet[1];
+ fdSet[0].fd = _fd;
+ fdSet[0].events = POLLIN;
+ int rs = ::poll(fdSet, 1, -1);
#endif
- if(rs == SOCKET_ERROR)
- {
- if(interrupted())
- {
- goto repeatSelect;
- }
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
- }
-
- goto repeat;
- }
-
- if(recvTruncated())
- {
- DatagramLimitException ex(__FILE__, __LINE__);
- if(_warn)
- {
- Warning out(_logger);
- out << "DatagramLimitException: maximum size of " << packetSize << " exceeded";
- }
- throw ex;
-
- }
-
- SocketException ex(__FILE__, __LINE__);
- ex.error = getSocketErrno();
- throw ex;
+ if(rs == SOCKET_ERROR)
+ {
+ if(interrupted())
+ {
+ goto repeatSelect;
+ }
+
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
+ }
+
+ goto repeat;
+ }
+
+ if(recvTruncated())
+ {
+ DatagramLimitException ex(__FILE__, __LINE__);
+ if(_warn)
+ {
+ Warning out(_logger);
+ out << "DatagramLimitException: maximum size of " << packetSize << " exceeded";
+ }
+ throw ex;
+
+ }
+
+ SocketException ex(__FILE__, __LINE__);
+ ex.error = getSocketErrno();
+ throw ex;
}
if(_traceLevels->network >= 3)
{
- Trace out(_logger, _traceLevels->networkCat);
- out << "received " << ret << " bytes via udp\n" << toString();
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "received " << ret << " bytes via udp\n" << toString();
}
if(_stats)
{
- _stats->bytesReceived(type(), static_cast<Int>(ret));
+ _stats->bytesReceived(type(), static_cast<Int>(ret));
}
buf.b.resize(ret);
@@ -352,12 +352,12 @@ IceInternal::UdpTransceiver::checkSendSize(const Buffer& buf, size_t messageSize
{
if(buf.b.size() > messageSizeMax)
{
- throw MemoryLimitException(__FILE__, __LINE__);
+ throw MemoryLimitException(__FILE__, __LINE__);
}
const int packetSize = min(_maxPacketSize, _sndSize - _udpOverhead);
if(packetSize < static_cast<int>(buf.b.size()))
{
- throw DatagramLimitException(__FILE__, __LINE__);
+ throw DatagramLimitException(__FILE__, __LINE__);
}
}
@@ -386,23 +386,23 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const s
{
try
{
- _fd = createSocket(true);
- setBufSize(instance);
- setBlock(_fd, false);
- getAddress(host, port, _addr);
- doConnect(_fd, _addr, -1);
- _connect = false; // We're connected now
-
- if(_traceLevels->network >= 1)
- {
- Trace out(_logger, _traceLevels->networkCat);
- out << "starting to send udp packets\n" << toString();
- }
+ _fd = createSocket(true);
+ setBufSize(instance);
+ setBlock(_fd, false);
+ getAddress(host, port, _addr);
+ doConnect(_fd, _addr, -1);
+ _connect = false; // We're connected now
+
+ if(_traceLevels->network >= 1)
+ {
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "starting to send udp packets\n" << toString();
+ }
}
catch(...)
{
- _fd = INVALID_SOCKET;
- throw;
+ _fd = INVALID_SOCKET;
+ throw;
}
#ifdef _WIN32
@@ -422,27 +422,27 @@ IceInternal::UdpTransceiver::UdpTransceiver(const InstancePtr& instance, const s
{
try
{
- _fd = createSocket(true);
- setBufSize(instance);
- setBlock(_fd, false);
- getAddress(host, port, _addr);
- if(_traceLevels->network >= 2)
- {
- Trace out(_logger, _traceLevels->networkCat);
- out << "attempting to bind to udp socket " << addrToString(_addr);
- }
- doBind(_fd, _addr);
-
- if(_traceLevels->network >= 1)
- {
- Trace out(_logger, _traceLevels->networkCat);
- out << "starting to receive udp packets\n" << toString();
- }
+ _fd = createSocket(true);
+ setBufSize(instance);
+ setBlock(_fd, false);
+ getAddress(host, port, _addr);
+ if(_traceLevels->network >= 2)
+ {
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "attempting to bind to udp socket " << addrToString(_addr);
+ }
+ doBind(_fd, _addr);
+
+ if(_traceLevels->network >= 1)
+ {
+ Trace out(_logger, _traceLevels->networkCat);
+ out << "starting to receive udp packets\n" << toString();
+ }
}
catch(...)
{
- _fd = INVALID_SOCKET;
- throw;
+ _fd = INVALID_SOCKET;
+ throw;
}
#ifdef _WIN32
@@ -467,66 +467,66 @@ IceInternal::UdpTransceiver::setBufSize(const InstancePtr& instance)
for(int i = 0; i < 2; ++i)
{
- string direction;
- string prop;
- int* addr;
- int dfltSize;
- if(i == 0)
- {
- direction = "receive";
- prop = "Ice.UDP.RcvSize";
- addr = &_rcvSize;
- dfltSize = getRecvBufferSize(_fd);
- _rcvSize = dfltSize;
- }
- else
- {
- direction = "send";
- prop = "Ice.UDP.SndSize";
- addr = &_sndSize;
- dfltSize = getSendBufferSize(_fd);
- _sndSize = dfltSize;
- }
-
- //
- // Get property for buffer size and check for sanity.
- //
- Int sizeRequested = instance->initializationData().properties->getPropertyAsIntWithDefault(prop, dfltSize);
- if(sizeRequested < _udpOverhead)
- {
- Warning out(_logger);
- out << "Invalid " << prop << " value of " << sizeRequested << " adjusted to " << dfltSize;
- sizeRequested = dfltSize;
- }
-
- if(sizeRequested != dfltSize)
- {
- //
- // Try to set the buffer size. The kernel will silently adjust
- // the size to an acceptable value. Then read the size back to
- // get the size that was actually set.
- //
- if(i == 0)
- {
- setRecvBufferSize(_fd, sizeRequested);
- *addr = getRecvBufferSize(_fd);
- }
- else
- {
- setSendBufferSize(_fd, sizeRequested);
- *addr = getSendBufferSize(_fd);
- }
-
- //
- // Warn if the size that was set is less than the requested size.
- //
- if(*addr < sizeRequested)
- {
- Warning out(_logger);
- out << "UDP " << direction << " buffer size: requested size of "
- << sizeRequested << " adjusted to " << *addr;
- }
- }
+ string direction;
+ string prop;
+ int* addr;
+ int dfltSize;
+ if(i == 0)
+ {
+ direction = "receive";
+ prop = "Ice.UDP.RcvSize";
+ addr = &_rcvSize;
+ dfltSize = getRecvBufferSize(_fd);
+ _rcvSize = dfltSize;
+ }
+ else
+ {
+ direction = "send";
+ prop = "Ice.UDP.SndSize";
+ addr = &_sndSize;
+ dfltSize = getSendBufferSize(_fd);
+ _sndSize = dfltSize;
+ }
+
+ //
+ // Get property for buffer size and check for sanity.
+ //
+ Int sizeRequested = instance->initializationData().properties->getPropertyAsIntWithDefault(prop, dfltSize);
+ if(sizeRequested < _udpOverhead)
+ {
+ Warning out(_logger);
+ out << "Invalid " << prop << " value of " << sizeRequested << " adjusted to " << dfltSize;
+ sizeRequested = dfltSize;
+ }
+
+ if(sizeRequested != dfltSize)
+ {
+ //
+ // Try to set the buffer size. The kernel will silently adjust
+ // the size to an acceptable value. Then read the size back to
+ // get the size that was actually set.
+ //
+ if(i == 0)
+ {
+ setRecvBufferSize(_fd, sizeRequested);
+ *addr = getRecvBufferSize(_fd);
+ }
+ else
+ {
+ setSendBufferSize(_fd, sizeRequested);
+ *addr = getSendBufferSize(_fd);
+ }
+
+ //
+ // Warn if the size that was set is less than the requested size.
+ //
+ if(*addr < sizeRequested)
+ {
+ Warning out(_logger);
+ out << "UDP " << direction << " buffer size: requested size of "
+ << sizeRequested << " adjusted to " << *addr;
+ }
+ }
}
}