[svn] commit: r2648 - in /branches/trac296/src/lib/cc: session.cc session.h session_unittests.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Fri Aug 6 13:18:44 UTC 2010
Author: jelte
Date: Fri Aug 6 13:18:44 2010
New Revision: 2648
Log:
added setTimeout(size_t milliseconds) and getTimeout() functions to set the timeout used for blocking reads on sessions
Modified:
branches/trac296/src/lib/cc/session.cc
branches/trac296/src/lib/cc/session.h
branches/trac296/src/lib/cc/session_unittests.cc
Modified: branches/trac296/src/lib/cc/session.cc
==============================================================================
--- branches/trac296/src/lib/cc/session.cc (original)
+++ branches/trac296/src/lib/cc/session.cc Fri Aug 6 13:18:44 2010
@@ -61,7 +61,8 @@
public:
SessionImpl(io_service& io_service) :
sequence_(-1), queue_(Element::createList()),
- io_service_(io_service), socket_(io_service_), data_length_(0)
+ io_service_(io_service), socket_(io_service_), data_length_(0),
+ timeout_(4000)
{}
void establish(const char& socket_file);
void disconnect();
@@ -69,8 +70,10 @@
size_t readDataLength();
// Blocking read. Will throw a SessionTimeout if the timeout value
// (in seconds) is thrown. If timeout is 0 it will block forever
- void readData(void* data, size_t datalen, size_t timeout = 5);
+ void readData(void* data, size_t datalen);
void startRead(boost::function<void()> user_handler);
+ virtual void setTimeout(size_t seconds) { timeout_ = seconds; };
+ virtual size_t getTimeout() { return timeout_; };
long int sequence_; // the next sequence number to use
std::string lname_;
@@ -90,6 +93,8 @@
uint32_t data_length_;
boost::function<void()> user_handler_;
asio::error_code error_;
+ // timeout for blocking reads (in seconds, defaults to 4)
+ size_t timeout_;
};
void
@@ -145,7 +150,7 @@
}
void
-SessionImpl::readData(void* data, size_t datalen, size_t timeout) {
+SessionImpl::readData(void* data, size_t datalen) {
bool timer_result = false;
bool read_result = false;
try {
@@ -154,8 +159,8 @@
&read_result, _1));
asio::deadline_timer timer(socket_.io_service());
- if (timeout != 0) {
- timer.expires_from_now(boost::posix_time::seconds(timeout));
+ if (getTimeout() != 0) {
+ timer.expires_from_now(boost::posix_time::milliseconds(getTimeout()));
timer.async_wait(boost::bind(&SessionImpl::setResult,
this, &timer_result, _1));
}
@@ -445,10 +450,18 @@
}
bool
-Session::hasQueuedMsgs()
-{
+Session::hasQueuedMsgs() {
return (impl_->queue_->size() > 0);
}
-}
-}
+void
+Session::setTimeout(size_t milliseconds) {
+ impl_->setTimeout(milliseconds);
+}
+
+size_t
+Session::getTimeout() {
+ return impl_->getTimeout();
+}
+}
+}
Modified: branches/trac296/src/lib/cc/session.h
==============================================================================
--- branches/trac296/src/lib/cc/session.h (original)
+++ branches/trac296/src/lib/cc/session.h Fri Aug 6 13:18:44 2010
@@ -97,6 +97,8 @@
virtual int reply(isc::data::ElementPtr& envelope,
isc::data::ElementPtr& newmsg) = 0;
virtual bool hasQueuedMsgs() = 0;
+ virtual void setTimeout(size_t milliseconds) = 0;
+ virtual size_t getTimeout() = 0;
};
class Session : public AbstractSession {
@@ -130,6 +132,15 @@
virtual int reply(isc::data::ElementPtr& envelope,
isc::data::ElementPtr& newmsg);
virtual bool hasQueuedMsgs();
+ /// \brief Set the default timeout for blocking reads
+ /// in this session to the given number of milliseconds
+ /// \param milliseconds the timeout for blocking reads in
+ /// milliseconds, if this is set to 0, reads will block
+ /// forever. Defaults to 4000.
+ virtual void setTimeout(size_t milliseconds);
+ /// \brief Returns the current timeout for blocking reads
+ /// \return The timeout (in milliseconds)
+ virtual size_t getTimeout();
private:
void sendmsg(isc::data::ElementPtr& msg);
void sendmsg(isc::data::ElementPtr& env,
Modified: branches/trac296/src/lib/cc/session_unittests.cc
==============================================================================
--- branches/trac296/src/lib/cc/session_unittests.cc (original)
+++ branches/trac296/src/lib/cc/session_unittests.cc Fri Aug 6 13:18:44 2010
@@ -172,7 +172,10 @@
::unlink("/tmp/mysock.sock");
TestDomainSocket tds(my_io_service, "/tmp/mysock.sock");
Session sess(my_io_service);
-
+ // set to a short timeout so the test doesn't take too long
+ EXPECT_EQ(4000, sess.getTimeout());
+ sess.setTimeout(100);
+ EXPECT_EQ(100, sess.getTimeout());
// no answer, should timeout
EXPECT_THROW(sess.establish("/tmp/mysock.sock"), isc::cc::SessionTimeout);
}
More information about the bind10-changes
mailing list