diff options
Diffstat (limited to 'cpp/src/Ice/Network.cpp')
-rw-r--r-- | cpp/src/Ice/Network.cpp | 1164 |
1 files changed, 582 insertions, 582 deletions
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp index 9cc42da481c..737f2f3f148 100644 --- a/cpp/src/Ice/Network.cpp +++ b/cpp/src/Ice/Network.cpp @@ -73,7 +73,7 @@ IceInternal::acceptInterrupted() { if(interrupted()) { - return true; + return true; } #ifdef _WIN32 @@ -168,7 +168,7 @@ IceInternal::connectionLost() errno == ENOTCONN || errno == ESHUTDOWN || errno == ECONNABORTED || - errno == EPIPE; + errno == EPIPE; #endif } @@ -200,24 +200,24 @@ IceInternal::createSocket(bool udp) if(udp) { - fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); + fd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); } else { - fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); + fd = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); } if(fd == INVALID_SOCKET) { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } if(!udp) { - setTcpNoDelay(fd); - setKeepAlive(fd); + setTcpNoDelay(fd); + setKeepAlive(fd); } return fd; @@ -230,18 +230,18 @@ IceInternal::closeSocket(SOCKET fd) int error = WSAGetLastError(); if(closesocket(fd) == SOCKET_ERROR) { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } WSASetLastError(error); #else int error = errno; if(close(fd) == SOCKET_ERROR) { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } errno = error; #endif @@ -266,29 +266,29 @@ IceInternal::shutdownSocketWrite(SOCKET fd) { if(shutdown(fd, SHUT_WR) == SOCKET_ERROR) { - // - // Ignore errors indicating that we are shutdown already. - // + // + // Ignore errors indicating that we are shutdown already. + // #if defined(_WIN32) - int error = WSAGetLastError(); - if(error == WSAENOTCONN) - { - return; - } + int error = WSAGetLastError(); + if(error == WSAENOTCONN) + { + return; + } #elif defined(__APPLE__) - if(errno == ENOTCONN || errno == EINVAL) - { - return; - } + if(errno == ENOTCONN || errno == EINVAL) + { + return; + } #else - if(errno == ENOTCONN) - { - return; - } + if(errno == ENOTCONN) + { + return; + } #endif - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } } @@ -297,30 +297,30 @@ IceInternal::shutdownSocketReadWrite(SOCKET fd) { if(shutdown(fd, SHUT_RDWR) == SOCKET_ERROR) { - // - // Ignore errors indicating that we are shutdown already. - // + // + // Ignore errors indicating that we are shutdown already. + // #if defined(_WIN32) - int error = WSAGetLastError(); - if(error == WSAENOTCONN) - { - return; - } + int error = WSAGetLastError(); + if(error == WSAENOTCONN) + { + return; + } #elif defined(__APPLE__) - if(errno == ENOTCONN || errno == EINVAL) - { - return; - } + if(errno == ENOTCONN || errno == EINVAL) + { + return; + } #else - if(errno == ENOTCONN) - { - return; - } + if(errno == ENOTCONN) + { + return; + } #endif - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } } @@ -330,47 +330,47 @@ IceInternal::setBlock(SOCKET fd, bool block) if(block) { #ifdef _WIN32 - unsigned long arg = 0; - if(ioctlsocket(fd, FIONBIO, &arg) == SOCKET_ERROR) - { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = WSAGetLastError(); - throw ex; - } + unsigned long arg = 0; + if(ioctlsocket(fd, FIONBIO, &arg) == SOCKET_ERROR) + { + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = WSAGetLastError(); + throw ex; + } #else - int flags = fcntl(fd, F_GETFL); - flags &= ~O_NONBLOCK; - if(fcntl(fd, F_SETFL, flags) == SOCKET_ERROR) - { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = errno; - throw ex; - } + int flags = fcntl(fd, F_GETFL); + flags &= ~O_NONBLOCK; + if(fcntl(fd, F_SETFL, flags) == SOCKET_ERROR) + { + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = errno; + throw ex; + } #endif } else { #ifdef _WIN32 - unsigned long arg = 1; - if(ioctlsocket(fd, FIONBIO, &arg) == SOCKET_ERROR) - { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = WSAGetLastError(); - throw ex; - } + unsigned long arg = 1; + if(ioctlsocket(fd, FIONBIO, &arg) == SOCKET_ERROR) + { + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = WSAGetLastError(); + throw ex; + } #else - int flags = fcntl(fd, F_GETFL); - flags |= O_NONBLOCK; - if(fcntl(fd, F_SETFL, flags) == SOCKET_ERROR) - { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = errno; - throw ex; - } + int flags = fcntl(fd, F_GETFL); + flags |= O_NONBLOCK; + if(fcntl(fd, F_SETFL, flags) == SOCKET_ERROR) + { + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = errno; + throw ex; + } #endif } } @@ -381,10 +381,10 @@ IceInternal::setTcpNoDelay(SOCKET fd) int flag = 1; if(setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, int(sizeof(int))) == SOCKET_ERROR) { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } } @@ -394,10 +394,10 @@ IceInternal::setKeepAlive(SOCKET fd) int flag = 1; if(setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (char*)&flag, int(sizeof(int))) == SOCKET_ERROR) { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } } @@ -406,10 +406,10 @@ IceInternal::setSendBufferSize(SOCKET fd, int sz) { if(setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&sz, int(sizeof(int))) == SOCKET_ERROR) { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } } @@ -420,10 +420,10 @@ IceInternal::getSendBufferSize(SOCKET fd) socklen_t len = sizeof(sz); if(getsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char*)&sz, &len) == SOCKET_ERROR || len != sizeof(sz)) { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } return sz; } @@ -433,10 +433,10 @@ IceInternal::setRecvBufferSize(SOCKET fd, int sz) { if(setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char*)&sz, int(sizeof(int))) == SOCKET_ERROR) { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } } @@ -447,10 +447,10 @@ IceInternal::getRecvBufferSize(SOCKET fd) socklen_t len = sizeof(sz); if(getsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char*)&sz, &len) == SOCKET_ERROR || len != sizeof(sz)) { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } return sz; } @@ -462,19 +462,19 @@ IceInternal::doBind(SOCKET fd, struct sockaddr_in& addr) int flag = 1; if(setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char*)&flag, int(sizeof(int))) == SOCKET_ERROR) { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } #endif if(bind(fd, reinterpret_cast<struct sockaddr*>(&addr), int(sizeof(addr))) == SOCKET_ERROR) { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } socklen_t len = static_cast<socklen_t>(sizeof(addr)); @@ -492,15 +492,15 @@ IceInternal::doListen(SOCKET fd, int backlog) repeatListen: if(::listen(fd, backlog) == SOCKET_ERROR) { - if(interrupted()) - { - goto repeatListen; - } - - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + if(interrupted()) + { + goto repeatListen; + } + + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } } @@ -522,173 +522,173 @@ IceInternal::doConnect(SOCKET fd, struct sockaddr_in& addr, int timeout) WSAEVENT event = WSACreateEvent(); if(event == 0) { - closeSocketNoThrow(fd); + closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = WSAGetLastError(); - throw ex; + SocketException ex(__FILE__, __LINE__); + ex.error = WSAGetLastError(); + throw ex; } if(WSAEventSelect(fd, event, FD_CONNECT) == SOCKET_ERROR) { - int error = WSAGetLastError(); + int error = WSAGetLastError(); - WSACloseEvent(event); - closeSocketNoThrow(fd); + WSACloseEvent(event); + closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = error; - throw ex; + SocketException ex(__FILE__, __LINE__); + ex.error = error; + throw ex; } #endif repeatConnect: if(::connect(fd, reinterpret_cast<struct sockaddr*>(&addr), int(sizeof(addr))) == SOCKET_ERROR) { - if(interrupted()) - { - goto repeatConnect; - } - - if(connectInProgress()) - { - int val; + if(interrupted()) + { + goto repeatConnect; + } + + if(connectInProgress()) + { + int val; #ifdef _WIN32 - WSAEVENT events[1]; - events[0] = event; - long tout = (timeout >= 0) ? timeout : WSA_INFINITE; - DWORD rc = WSAWaitForMultipleEvents(1, events, FALSE, tout, FALSE); - if(rc == WSA_WAIT_FAILED) - { - int error = WSAGetLastError(); - - WSACloseEvent(event); - closeSocketNoThrow(fd); - - SocketException ex(__FILE__, __LINE__); - ex.error = error; - throw ex; - } - - if(rc == WSA_WAIT_TIMEOUT) - { - WSACloseEvent(event); - closeSocketNoThrow(fd); - - assert(timeout >= 0); - throw ConnectTimeoutException(__FILE__, __LINE__); - } - assert(rc == WSA_WAIT_EVENT_0); - - WSANETWORKEVENTS nevents; - if(WSAEnumNetworkEvents(fd, event, &nevents) == SOCKET_ERROR) - { - int error = WSAGetLastError(); - WSACloseEvent(event); - closeSocketNoThrow(fd); - - SocketException ex(__FILE__, __LINE__); - ex.error = error; - throw ex; - } - - // - // Now we close the event, because we're finished and - // this code be repeated. - // - WSACloseEvent(event); - - assert(nevents.lNetworkEvents & FD_CONNECT); - val = nevents.iErrorCode[FD_CONNECT_BIT]; + WSAEVENT events[1]; + events[0] = event; + long tout = (timeout >= 0) ? timeout : WSA_INFINITE; + DWORD rc = WSAWaitForMultipleEvents(1, events, FALSE, tout, FALSE); + if(rc == WSA_WAIT_FAILED) + { + int error = WSAGetLastError(); + + WSACloseEvent(event); + closeSocketNoThrow(fd); + + SocketException ex(__FILE__, __LINE__); + ex.error = error; + throw ex; + } + + if(rc == WSA_WAIT_TIMEOUT) + { + WSACloseEvent(event); + closeSocketNoThrow(fd); + + assert(timeout >= 0); + throw ConnectTimeoutException(__FILE__, __LINE__); + } + assert(rc == WSA_WAIT_EVENT_0); + + WSANETWORKEVENTS nevents; + if(WSAEnumNetworkEvents(fd, event, &nevents) == SOCKET_ERROR) + { + int error = WSAGetLastError(); + WSACloseEvent(event); + closeSocketNoThrow(fd); + + SocketException ex(__FILE__, __LINE__); + ex.error = error; + throw ex; + } + + // + // Now we close the event, because we're finished and + // this code be repeated. + // + WSACloseEvent(event); + + assert(nevents.lNetworkEvents & FD_CONNECT); + val = nevents.iErrorCode[FD_CONNECT_BIT]; #else - repeatPoll: - struct pollfd pollFd[1]; - pollFd[0].fd = fd; - pollFd[0].events = POLLOUT; - int ret = ::poll(pollFd, 1, timeout); - if(ret == 0) - { - closeSocketNoThrow(fd); - throw ConnectTimeoutException(__FILE__, __LINE__); - } - else if(ret == SOCKET_ERROR) - { - if(interrupted()) - { - goto repeatPoll; - } - - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - - // - // Strange windows bug: The following call to Sleep() is - // necessary, otherwise no error is reported through - // getsockopt. - // - //Sleep(0); - socklen_t len = static_cast<socklen_t>(sizeof(int)); - if(getsockopt(fd, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&val), &len) == SOCKET_ERROR) - { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } + repeatPoll: + struct pollfd pollFd[1]; + pollFd[0].fd = fd; + pollFd[0].events = POLLOUT; + int ret = ::poll(pollFd, 1, timeout); + if(ret == 0) + { + closeSocketNoThrow(fd); + throw ConnectTimeoutException(__FILE__, __LINE__); + } + else if(ret == SOCKET_ERROR) + { + if(interrupted()) + { + goto repeatPoll; + } + + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + + // + // Strange windows bug: The following call to Sleep() is + // necessary, otherwise no error is reported through + // getsockopt. + // + //Sleep(0); + socklen_t len = static_cast<socklen_t>(sizeof(int)); + if(getsockopt(fd, SOL_SOCKET, SO_ERROR, reinterpret_cast<char*>(&val), &len) == SOCKET_ERROR) + { + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } #endif - - if(val > 0) - { - closeSocketNoThrow(fd); + + if(val > 0) + { + closeSocketNoThrow(fd); #ifdef _WIN32 - WSASetLastError(val); + WSASetLastError(val); #else - errno = val; + errno = val; #endif - if(connectionRefused()) - { - ConnectionRefusedException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - else if(connectFailed()) - { - ConnectFailedException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - else - { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - } - - return; - } + if(connectionRefused()) + { + ConnectionRefusedException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + else if(connectFailed()) + { + ConnectFailedException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + else + { + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + } + + return; + } - closeSocketNoThrow(fd); - if(connectionRefused()) - { - ConnectionRefusedException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - else if(connectFailed()) - { - ConnectFailedException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - else - { - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } + closeSocketNoThrow(fd); + if(connectionRefused()) + { + ConnectionRefusedException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + else if(connectFailed()) + { + ConnectFailedException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } + else + { + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } } } @@ -704,60 +704,60 @@ IceInternal::doAccept(SOCKET fd, int timeout) repeatAccept: if((ret = ::accept(fd, 0, 0)) == INVALID_SOCKET) { - if(acceptInterrupted()) - { - goto repeatAccept; - } - - if(wouldBlock()) - { - repeatSelect: - int rs; + if(acceptInterrupted()) + { + goto repeatAccept; + } + + if(wouldBlock()) + { + repeatSelect: + int rs; #ifdef _WIN32 - fd_set fdSet; - FD_ZERO(&fdSet); - FD_SET(fd, &fdSet); - if(timeout >= 0) - { - struct timeval tv; - tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout - tv.tv_sec * 1000) * 1000; - rs = ::select(static_cast<int>(fd + 1), &fdSet, 0, 0, &tv); - } - else - { - rs = ::select(static_cast<int>(fd + 1), &fdSet, 0, 0, 0); - } + fd_set fdSet; + FD_ZERO(&fdSet); + FD_SET(fd, &fdSet); + if(timeout >= 0) + { + struct timeval tv; + tv.tv_sec = timeout / 1000; + tv.tv_usec = (timeout - tv.tv_sec * 1000) * 1000; + rs = ::select(static_cast<int>(fd + 1), &fdSet, 0, 0, &tv); + } + else + { + rs = ::select(static_cast<int>(fd + 1), &fdSet, 0, 0, 0); + } #else - struct pollfd pollFd[1]; - pollFd[0].fd = fd; - pollFd[0].events = POLLIN; - rs = ::poll(pollFd, 1, timeout); + struct pollfd pollFd[1]; + pollFd[0].fd = fd; + pollFd[0].events = POLLIN; + rs = ::poll(pollFd, 1, timeout); #endif - - if(rs == SOCKET_ERROR) - { - if(interrupted()) - { - goto repeatSelect; - } - - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } - - if(rs == 0) - { - throw TimeoutException(__FILE__, __LINE__); - } - - goto repeatAccept; - } - - 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; + } + + if(rs == 0) + { + throw TimeoutException(__FILE__, __LINE__); + } + + goto repeatAccept; + } + + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } setTcpNoDelay(ret); @@ -786,59 +786,59 @@ IceInternal::getAddress(const string& host, int port, struct sockaddr_in& addr) { #ifdef _WIN32 - // - // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice. - // - - // - // gethostbyname() is thread safe on Windows, with a separate hostent per thread - // - struct hostent* entry; - int retry = 5; - do - { - entry = gethostbyname(host.c_str()); - } - while(entry == 0 && WSAGetLastError() == WSATRY_AGAIN && --retry >= 0); - - if(entry == 0) - { - DNSException ex(__FILE__, __LINE__); - - ex.error = WSAGetLastError(); - ex.host = host; - throw ex; - } - memcpy(&addr.sin_addr, entry->h_addr, entry->h_length); + // + // Windows XP has getaddrinfo(), but we don't want to require XP to run Ice. + // + + // + // gethostbyname() is thread safe on Windows, with a separate hostent per thread + // + struct hostent* entry; + int retry = 5; + do + { + entry = gethostbyname(host.c_str()); + } + while(entry == 0 && WSAGetLastError() == WSATRY_AGAIN && --retry >= 0); + + if(entry == 0) + { + DNSException ex(__FILE__, __LINE__); + + ex.error = WSAGetLastError(); + ex.host = host; + throw ex; + } + memcpy(&addr.sin_addr, entry->h_addr, entry->h_length); #else - struct addrinfo* info = 0; - int retry = 5; - - struct addrinfo hints = { 0 }; - hints.ai_family = PF_INET; - - int rs = 0; - do - { - rs = getaddrinfo(host.c_str(), 0, &hints, &info); - } - while(info == 0 && rs == EAI_AGAIN && --retry >= 0); - - if(rs != 0) - { - DNSException ex(__FILE__, __LINE__); - ex.error = rs; - ex.host = host; - throw ex; - } - - assert(info->ai_family == PF_INET); - struct sockaddr_in* sin = reinterpret_cast<sockaddr_in*>(info->ai_addr); - - addr.sin_addr.s_addr = sin->sin_addr.s_addr; - freeaddrinfo(info); + struct addrinfo* info = 0; + int retry = 5; + + struct addrinfo hints = { 0 }; + hints.ai_family = PF_INET; + + int rs = 0; + do + { + rs = getaddrinfo(host.c_str(), 0, &hints, &info); + } + while(info == 0 && rs == EAI_AGAIN && --retry >= 0); + + if(rs != 0) + { + DNSException ex(__FILE__, __LINE__); + ex.error = rs; + ex.host = host; + throw ex; + } + + assert(info->ai_family == PF_INET); + struct sockaddr_in* sin = reinterpret_cast<sockaddr_in*>(info->ai_addr); + + addr.sin_addr.s_addr = sin->sin_addr.s_addr; + freeaddrinfo(info); #endif } @@ -871,12 +871,12 @@ IceInternal::createPipe(SOCKET fds[2]) try { - fds[0] = createSocket(false); + fds[0] = createSocket(false); } catch(...) { - ::closesocket(fd); - throw; + ::closesocket(fd); + throw; } try @@ -886,19 +886,19 @@ IceInternal::createPipe(SOCKET fds[2]) } catch(...) { - ::closesocket(fd); - throw; + ::closesocket(fd); + throw; } try { - fds[1] = doAccept(fd, -1); + fds[1] = doAccept(fd, -1); } catch(...) { - ::closesocket(fds[0]); - ::closesocket(fd); - throw; + ::closesocket(fds[0]); + ::closesocket(fd); + throw; } ::closesocket(fd); @@ -909,18 +909,18 @@ IceInternal::createPipe(SOCKET fds[2]) } catch(...) { - ::closesocket(fds[0]); - ::closesocket(fd); - throw; + ::closesocket(fds[0]); + ::closesocket(fd); + throw; } #else if(::pipe(fds) != 0) { - SyscallException ex(__FILE__, __LINE__); - ex.error = getSystemErrno(); - throw ex; + SyscallException ex(__FILE__, __LINE__); + ex.error = getSystemErrno(); + throw ex; } try @@ -929,8 +929,8 @@ IceInternal::createPipe(SOCKET fds[2]) } catch(...) { - closeSocketNoThrow(fds[1]); - throw; + closeSocketNoThrow(fds[1]); + throw; } try @@ -939,8 +939,8 @@ IceInternal::createPipe(SOCKET fds[2]) } catch(...) { - closeSocketNoThrow(fds[0]); - throw; + closeSocketNoThrow(fds[0]); + throw; } #endif @@ -953,196 +953,196 @@ IceInternal::errorToString(int error) { if(error < WSABASEERR) { - LPVOID lpMsgBuf = 0; - DWORD ok = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - NULL, - error, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - (LPTSTR)&lpMsgBuf, - 0, - NULL); - if(ok) - { - LPCTSTR msg = (LPCTSTR)lpMsgBuf; - assert(msg && strlen((const char*)msg) > 0); - string result = (const char*)msg; - if(result[result.length() - 1] == '\n') - { - result = result.substr(0, result.length() - 2); - } - LocalFree(lpMsgBuf); - return result; - } - else - { - ostringstream os; - os << "unknown error: " << error; - return os.str(); - } + LPVOID lpMsgBuf = 0; + DWORD ok = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + error, + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language + (LPTSTR)&lpMsgBuf, + 0, + NULL); + if(ok) + { + LPCTSTR msg = (LPCTSTR)lpMsgBuf; + assert(msg && strlen((const char*)msg) > 0); + string result = (const char*)msg; + if(result[result.length() - 1] == '\n') + { + result = result.substr(0, result.length() - 2); + } + LocalFree(lpMsgBuf); + return result; + } + else + { + ostringstream os; + os << "unknown error: " << error; + return os.str(); + } } switch(error) { case WSAEINTR: - return "WSAEINTR"; - + return "WSAEINTR"; + case WSAEBADF: - return "WSAEBADF"; - + return "WSAEBADF"; + case WSAEACCES: - return "WSAEACCES"; - + return "WSAEACCES"; + case WSAEFAULT: - return "WSAEFAULT"; - + return "WSAEFAULT"; + case WSAEINVAL: - return "WSAEINVAL"; - + return "WSAEINVAL"; + case WSAEMFILE: - return "WSAEMFILE"; - + return "WSAEMFILE"; + case WSAEWOULDBLOCK: - return "WSAEWOULDBLOCK"; - + return "WSAEWOULDBLOCK"; + case WSAEINPROGRESS: - return "WSAEINPROGRESS"; - + return "WSAEINPROGRESS"; + case WSAEALREADY: - return "WSAEALREADY"; - + return "WSAEALREADY"; + case WSAENOTSOCK: - return "WSAENOTSOCK"; - + return "WSAENOTSOCK"; + case WSAEDESTADDRREQ: - return "WSAEDESTADDRREQ"; - + return "WSAEDESTADDRREQ"; + case WSAEMSGSIZE: - return "WSAEMSGSIZE"; - + return "WSAEMSGSIZE"; + case WSAEPROTOTYPE: - return "WSAEPROTOTYPE"; - + return "WSAEPROTOTYPE"; + case WSAENOPROTOOPT: - return "WSAENOPROTOOPT"; - + return "WSAENOPROTOOPT"; + case WSAEPROTONOSUPPORT: - return "WSAEPROTONOSUPPORT"; - + return "WSAEPROTONOSUPPORT"; + case WSAESOCKTNOSUPPORT: - return "WSAESOCKTNOSUPPORT"; - + return "WSAESOCKTNOSUPPORT"; + case WSAEOPNOTSUPP: - return "WSAEOPNOTSUPP"; - + return "WSAEOPNOTSUPP"; + case WSAEPFNOSUPPORT: - return "WSAEPFNOSUPPORT"; - + return "WSAEPFNOSUPPORT"; + case WSAEAFNOSUPPORT: - return "WSAEAFNOSUPPORT"; - + return "WSAEAFNOSUPPORT"; + case WSAEADDRINUSE: - return "WSAEADDRINUSE"; - + return "WSAEADDRINUSE"; + case WSAEADDRNOTAVAIL: - return "WSAEADDRNOTAVAIL"; - + return "WSAEADDRNOTAVAIL"; + case WSAENETDOWN: - return "WSAENETDOWN"; - + return "WSAENETDOWN"; + case WSAENETUNREACH: - return "WSAENETUNREACH"; - + return "WSAENETUNREACH"; + case WSAENETRESET: - return "WSAENETRESET"; - + return "WSAENETRESET"; + case WSAECONNABORTED: - return "WSAECONNABORTED"; - + return "WSAECONNABORTED"; + case WSAECONNRESET: - return "WSAECONNRESET"; - + return "WSAECONNRESET"; + case WSAENOBUFS: - return "WSAENOBUFS"; - + return "WSAENOBUFS"; + case WSAEISCONN: - return "WSAEISCONN"; - + return "WSAEISCONN"; + case WSAENOTCONN: - return "WSAENOTCONN"; - + return "WSAENOTCONN"; + case WSAESHUTDOWN: - return "WSAESHUTDOWN"; - + return "WSAESHUTDOWN"; + case WSAETOOMANYREFS: - return "WSAETOOMANYREFS"; - + return "WSAETOOMANYREFS"; + case WSAETIMEDOUT: - return "WSAETIMEDOUT"; - + return "WSAETIMEDOUT"; + case WSAECONNREFUSED: - return "WSAECONNREFUSED"; - + return "WSAECONNREFUSED"; + case WSAELOOP: - return "WSAELOOP"; - + return "WSAELOOP"; + case WSAENAMETOOLONG: - return "WSAENAMETOOLONG"; - + return "WSAENAMETOOLONG"; + case WSAEHOSTDOWN: - return "WSAEHOSTDOWN"; - + return "WSAEHOSTDOWN"; + case WSAEHOSTUNREACH: - return "WSAEHOSTUNREACH"; - + return "WSAEHOSTUNREACH"; + case WSAENOTEMPTY: - return "WSAENOTEMPTY"; - + return "WSAENOTEMPTY"; + case WSAEPROCLIM: - return "WSAEPROCLIM"; - + return "WSAEPROCLIM"; + case WSAEUSERS: - return "WSAEUSERS"; - + return "WSAEUSERS"; + case WSAEDQUOT: - return "WSAEDQUOT"; - + return "WSAEDQUOT"; + case WSAESTALE: - return "WSAESTALE"; - + return "WSAESTALE"; + case WSAEREMOTE: - return "WSAEREMOTE"; - + return "WSAEREMOTE"; + case WSAEDISCON: - return "WSAEDISCON"; - + return "WSAEDISCON"; + case WSASYSNOTREADY: - return "WSASYSNOTREADY"; - + return "WSASYSNOTREADY"; + case WSAVERNOTSUPPORTED: - return "WSAVERNOTSUPPORTED"; - + return "WSAVERNOTSUPPORTED"; + case WSANOTINITIALISED: - return "WSANOTINITIALISED"; - + return "WSANOTINITIALISED"; + case WSAHOST_NOT_FOUND: - return "WSAHOST_NOT_FOUND"; - + return "WSAHOST_NOT_FOUND"; + case WSATRY_AGAIN: - return "WSATRY_AGAIN"; - + return "WSATRY_AGAIN"; + case WSANO_RECOVERY: - return "WSANO_RECOVERY"; - + return "WSANO_RECOVERY"; + case WSANO_DATA: - return "WSANO_DATA"; + return "WSANO_DATA"; default: { - ostringstream os; - os << "unknown socket error: " << error; - return os.str(); + ostringstream os; + os << "unknown socket error: " << error; + return os.str(); } } } @@ -1184,7 +1184,7 @@ IceInternal::fdToString(SOCKET fd) { if(fd == INVALID_SOCKET) { - return "<closed>"; + return "<closed>"; } struct sockaddr_in localAddr; @@ -1197,11 +1197,11 @@ IceInternal::fdToString(SOCKET fd) s << "local address = " << addrToString(localAddr); if(peerConnected) { - s << "\nremote address = " << addrToString(remoteAddr); + s << "\nremote address = " << addrToString(remoteAddr); } else { - s << "\nremote address = <not connected>"; + s << "\nremote address = <not connected>"; } return s.str(); } @@ -1212,10 +1212,10 @@ IceInternal::fdToLocalAddress(SOCKET fd, struct sockaddr_in& addr) socklen_t len = static_cast<socklen_t>(sizeof(struct sockaddr_in)); if(getsockname(fd, reinterpret_cast<struct sockaddr*>(&addr), &len) == SOCKET_ERROR) { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } } @@ -1225,17 +1225,17 @@ IceInternal::fdToRemoteAddress(SOCKET fd, struct sockaddr_in& addr) socklen_t len = static_cast<socklen_t>(sizeof(struct sockaddr_in)); if(getpeername(fd, reinterpret_cast<struct sockaddr*>(&addr), &len) == SOCKET_ERROR) { - if(notConnected()) - { - return false; - } - else - { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } + if(notConnected()) + { + return false; + } + else + { + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } } return true; @@ -1275,10 +1275,10 @@ IceInternal::getLocalHosts() if(curr->ifa_addr && curr->ifa_addr->sa_family == AF_INET) { struct sockaddr_in* addr = reinterpret_cast<struct sockaddr_in*>(curr->ifa_addr); - if(addr->sin_addr.s_addr != 0) - { - result.push_back(inetAddrToString((*addr).sin_addr)); - } + if(addr->sin_addr.s_addr != 0) + { + result.push_back(inetAddrToString((*addr).sin_addr)); + } } curr = curr->ifa_next; @@ -1312,17 +1312,17 @@ IceInternal::getLocalHosts() int rs = ioctl(fd, cmd, &ifc); if(rs == SOCKET_ERROR) { - free(ifc.ifc_buf); - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; + free(ifc.ifc_buf); + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; } else if(ifc.ifc_len == old_ifc_len) { // - // Returned same length twice in a row, finished. - // + // Returned same length twice in a row, finished. + // break; } else @@ -1341,10 +1341,10 @@ IceInternal::getLocalHosts() if(ifr[i].ifr_addr.sa_family == AF_INET) { struct sockaddr_in* addr = reinterpret_cast<struct sockaddr_in*>(&ifr[i].ifr_addr); - if(addr->sin_addr.s_addr != 0) - { - result.push_back(inetAddrToString((*addr).sin_addr)); - } + if(addr->sin_addr.s_addr != 0) + { + result.push_back(inetAddrToString((*addr).sin_addr)); + } } } @@ -1368,8 +1368,8 @@ IceInternal::getLocalAddresses() buffer.resize(1024); unsigned long len = 0; DWORD rs = WSAIoctl(fd, SIO_ADDRESS_LIST_QUERY, 0, 0, - &buffer[0], static_cast<DWORD>(buffer.size()), - &len, 0, 0); + &buffer[0], static_cast<DWORD>(buffer.size()), + &len, 0, 0); if(rs == SOCKET_ERROR) { // @@ -1380,8 +1380,8 @@ IceInternal::getLocalAddresses() { buffer.resize(len); rs = WSAIoctl(fd, SIO_ADDRESS_LIST_QUERY, 0, 0, - &buffer[0], static_cast<DWORD>(buffer.size()), - &len, 0, 0); + &buffer[0], static_cast<DWORD>(buffer.size()), + &len, 0, 0); } if(rs == SOCKET_ERROR) @@ -1433,17 +1433,17 @@ IceInternal::isLocalAddress(const struct sockaddr_in& addr) vector<struct sockaddr_in> localAddrs = getLocalAddresses(); for(vector<struct sockaddr_in>::const_iterator p = localAddrs.begin(); p != localAddrs.end(); ++p) { - if(compareAddress(addr0, *p)) - { - return true; - } + if(compareAddress(addr0, *p)) + { + return true; + } } } catch(const Ice::LocalException&) { - // - // TODO: Warning? - // + // + // TODO: Warning? + // } return false; } @@ -1455,17 +1455,17 @@ IceInternal::isPeerLocal(SOCKET fd) struct sockaddr_in remoteAddr; if(getpeername(fd, reinterpret_cast<struct sockaddr*>(&remoteAddr), &remoteLen) == SOCKET_ERROR) { - if(notConnected()) - { - return false; - } - else - { - closeSocketNoThrow(fd); - SocketException ex(__FILE__, __LINE__); - ex.error = getSocketErrno(); - throw ex; - } + if(notConnected()) + { + return false; + } + else + { + closeSocketNoThrow(fd); + SocketException ex(__FILE__, __LINE__); + ex.error = getSocketErrno(); + throw ex; + } } return isLocalAddress(remoteAddr); } |