diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/net/sock.cpp | 26 | ||||
-rw-r--r-- | util/version.cpp | 2 |
2 files changed, 14 insertions, 14 deletions
diff --git a/util/net/sock.cpp b/util/net/sock.cpp index ac565c3..a032e50 100644 --- a/util/net/sock.cpp +++ b/util/net/sock.cpp @@ -52,10 +52,18 @@ namespace mongo { tv.tv_usec = (int)((long long)(secs*1000*1000) % (1000*1000)); bool report = logLevel > 3; // solaris doesn't provide these DEV report = true; - bool ok = setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, (char *) &tv, sizeof(tv) ) == 0; - if( report && !ok ) log() << "unabled to set SO_RCVTIMEO" << endl; - ok = setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char *) &tv, sizeof(tv) ) == 0; - DEV if( report && !ok ) log() << "unabled to set SO_RCVTIMEO" << endl; +#if defined(_WIN32) + tv.tv_sec *= 1000; // Windows timeout is a DWORD, in milliseconds. + int status = setsockopt( sock, SOL_SOCKET, SO_RCVTIMEO, (char *) &tv.tv_sec, sizeof(DWORD) ) == 0; + if( report && (status == SOCKET_ERROR) ) log() << "unable to set SO_RCVTIMEO" << endl; + status = setsockopt( sock, SOL_SOCKET, SO_SNDTIMEO, (char *) &tv.tv_sec, sizeof(DWORD) ) == 0; + DEV if( report && (status == SOCKET_ERROR) ) log() << "unable to set SO_SNDTIMEO" << endl; +#else + bool ok = setsockopt( sock, SOL_SOCKET, SO_RCVTIMEO, (char *) &tv, sizeof(tv) ) == 0; + if( report && !ok ) log() << "unable to set SO_RCVTIMEO" << endl; + ok = setsockopt( sock, SOL_SOCKET, SO_SNDTIMEO, (char *) &tv, sizeof(tv) ) == 0; + DEV if( report && !ok ) log() << "unable to set SO_SNDTIMEO" << endl; +#endif } #if defined(_WIN32) @@ -755,15 +763,7 @@ namespace mongo { } void Socket::setTimeout( double secs ) { - struct timeval tv; - tv.tv_sec = (int)secs; - tv.tv_usec = (int)((long long)(secs*1000*1000) % (1000*1000)); - bool report = logLevel > 3; // solaris doesn't provide these - DEV report = true; - bool ok = setsockopt(_fd, SOL_SOCKET, SO_RCVTIMEO, (char *) &tv, sizeof(tv) ) == 0; - if( report && !ok ) log() << "unabled to set SO_RCVTIMEO" << endl; - ok = setsockopt(_fd, SOL_SOCKET, SO_SNDTIMEO, (char *) &tv, sizeof(tv) ) == 0; - DEV if( report && !ok ) log() << "unabled to set SO_RCVTIMEO" << endl; + setSockTimeouts( _fd, secs ); } #if defined(_WIN32) diff --git a/util/version.cpp b/util/version.cpp index 8b08ff4..03ff548 100644 --- a/util/version.cpp +++ b/util/version.cpp @@ -38,7 +38,7 @@ namespace mongo { * 1.2.3-rc4-pre- * If you really need to do something else you'll need to fix _versionArray() */ - const char versionString[] = "2.0.5"; + const char versionString[] = "2.0.6"; // See unit test for example outputs static BSONArray _versionArray(const char* version){ |