From c31769cceb013d947c2349f21285dfaf90d83fe2 Mon Sep 17 00:00:00 2001 From: Aditya Agarwal Date: Tue, 11 Dec 2007 22:23:51 +0000 Subject: [PATCH] -- better error checking for setRecvTimeout and setSendTimeout Summary: - could help prevent a 2.6.13 kernel bug Reviewed By: mcslee, dreiss Test Plan: - Testing kernel crashes git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665387 13f79535-47bb-0310-9956-ffa450edef68 --- lib/cpp/src/transport/TSocket.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/lib/cpp/src/transport/TSocket.cpp b/lib/cpp/src/transport/TSocket.cpp index 2171baba..c2169290 100644 --- a/lib/cpp/src/transport/TSocket.cpp +++ b/lib/cpp/src/transport/TSocket.cpp @@ -438,13 +438,21 @@ void TSocket::setConnTimeout(int ms) { } void TSocket::setRecvTimeout(int ms) { + if (ms < 0) { + char errBuf[512]; + sprintf(errBuf, "TSocket::setRecvTimeout with negative input: %d\n", ms); + GlobalOutput(errBuf); + return; + } recvTimeout_ = ms; - recvTimeval_.tv_sec = (int)(recvTimeout_/1000); - recvTimeval_.tv_usec = (int)((recvTimeout_%1000)*1000); + if (socket_ < 0) { return; } + recvTimeval_.tv_sec = (int)(recvTimeout_/1000); + recvTimeval_.tv_usec = (int)((recvTimeout_%1000)*1000); + // Copy because select may modify struct timeval r = recvTimeval_; int ret = setsockopt(socket_, SOL_SOCKET, SO_RCVTIMEO, &r, sizeof(r)); @@ -455,7 +463,14 @@ void TSocket::setRecvTimeout(int ms) { } void TSocket::setSendTimeout(int ms) { + if (ms < 0) { + char errBuf[512]; + sprintf(errBuf, "TSocket::setSendTimeout with negative input: %d\n", ms); + GlobalOutput(errBuf); + return; + } sendTimeout_ = ms; + if (socket_ < 0) { return; } -- 2.17.1