version 1.27.4.1, 2008/01/02 21:00:39
|
version 1.32.4.1, 2008/09/12 07:56:43
|
|
|
{ timeoutMilliseconds/1000, timeoutMilliseconds%1000*1000 }; | { timeoutMilliseconds/1000, timeoutMilliseconds%1000*1000 }; |
int selectResult = -1; | int selectResult = -1; |
| |
|
#ifdef PEGASUS_OS_TYPE_WINDOWS |
|
PEGASUS_RETRY_SYSTEM_CALL( |
|
select(FD_SETSIZE, NULL, &fdwrite, &fdwrite, &timeoutValue), |
|
selectResult); |
|
#else |
PEGASUS_RETRY_SYSTEM_CALL( | PEGASUS_RETRY_SYSTEM_CALL( |
select(FD_SETSIZE, NULL, &fdwrite, NULL, &timeoutValue), | select(FD_SETSIZE, NULL, &fdwrite, NULL, &timeoutValue), |
selectResult); | selectResult); |
|
#endif |
if (selectResult == 0) | if (selectResult == 0) |
{ | { |
PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL2, |
PEG_TRACE_CSTRING(TRC_HTTP, Tracer::LEVEL1, |
"select() timed out waiting for the socket connection to be " | "select() timed out waiting for the socket connection to be " |
"established."); | "established."); |
return false; | return false; |
|
|
} | } |
else | else |
{ | { |
PEG_TRACE((TRC_HTTP, Tracer::LEVEL2, |
PEG_TRACE((TRC_HTTP, Tracer::LEVEL1, |
"Did not connect, getsockopt() returned optval = %d", | "Did not connect, getsockopt() returned optval = %d", |
optval)); | optval)); |
return false; | return false; |
|
|
} | } |
else | else |
{ | { |
PEG_TRACE((TRC_HTTP, Tracer::LEVEL2, |
PEG_TRACE((TRC_HTTP, Tracer::LEVEL1, |
"select() returned error code %d", | "select() returned error code %d", |
getSocketError())); | getSocketError())); |
return false; | return false; |
} | } |
} | } |
| |
PEG_TRACE((TRC_HTTP, Tracer::LEVEL2, |
PEG_TRACE((TRC_HTTP, Tracer::LEVEL1, |
"connect() returned error code %d", | "connect() returned error code %d", |
getSocketError())); | getSocketError())); |
return false; | return false; |
|
|
} | } |
} | } |
| |
void Socket::close(SocketHandle socket) |
void Socket::close(SocketHandle& socket) |
{ | { |
if (socket != -1) |
if (socket != PEGASUS_INVALID_SOCKET) |
{ | { |
#ifdef PEGASUS_OS_TYPE_WINDOWS | #ifdef PEGASUS_OS_TYPE_WINDOWS |
if (!closesocket(socket)) | if (!closesocket(socket)) |
socket = -1; |
{ |
|
socket = PEGASUS_INVALID_SOCKET; |
|
} |
#else | #else |
int status; | int status; |
PEGASUS_RETRY_SYSTEM_CALL(::close(socket), status); | PEGASUS_RETRY_SYSTEM_CALL(::close(socket), status); |
| |
if (status == 0) | if (status == 0) |
socket = -1; |
{ |
|
socket = PEGASUS_INVALID_SOCKET; |
|
} |
#endif | #endif |
} | } |
} | } |
|
|
#ifdef PEGASUS_OS_TYPE_WINDOWS | #ifdef PEGASUS_OS_TYPE_WINDOWS |
unsigned long flag = 1; // Use "flag = 0" to enable blocking | unsigned long flag = 1; // Use "flag = 0" to enable blocking |
ioctlsocket(socket, FIONBIO, &flag); | ioctlsocket(socket, FIONBIO, &flag); |
|
#elif PEGASUS_OS_VMS |
|
int flag=1; // Use "flag = 0" to enable blocking |
|
ioctl(socket, FIONBIO, &flag); |
#else | #else |
int flags = fcntl(socket, F_GETFL, 0); | int flags = fcntl(socket, F_GETFL, 0); |
flags |= O_NONBLOCK; // Use "flags &= ~O_NONBLOCK" to enable blocking | flags |= O_NONBLOCK; // Use "flags &= ~O_NONBLOCK" to enable blocking |
|
|
{ | { |
WSADATA tmp; | WSADATA tmp; |
| |
if (WSAStartup(0x202, &tmp) == SOCKET_ERROR) |
int err = WSAStartup(0x202, &tmp); |
WSACleanup(); |
if (err != 0) |
|
{ |
|
throw Exception(MessageLoaderParms( |
|
"Common.Socket.WSASTARTUP_FAILED.WINDOWS", |
|
"WSAStartup failed with error $0.", |
|
err)); |
|
} |
} | } |
| |
_socketInterfaceRefCount++; | _socketInterfaceRefCount++; |