summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys/posix/AsynchIO.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/qpid/sys/posix/AsynchIO.cpp')
-rw-r--r--cpp/src/qpid/sys/posix/AsynchIO.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/cpp/src/qpid/sys/posix/AsynchIO.cpp b/cpp/src/qpid/sys/posix/AsynchIO.cpp
index 61f10726f0..5ffe9b2b11 100644
--- a/cpp/src/qpid/sys/posix/AsynchIO.cpp
+++ b/cpp/src/qpid/sys/posix/AsynchIO.cpp
@@ -154,15 +154,14 @@ private:
public:
AsynchConnector(const Socket& socket,
- Poller::shared_ptr poller,
std::string hostname,
uint16_t port,
ConnectedCallback connCb,
FailedCallback failCb);
+ void start(Poller::shared_ptr poller);
};
AsynchConnector::AsynchConnector(const Socket& s,
- Poller::shared_ptr poller,
std::string hostname,
uint16_t port,
ConnectedCallback connCb,
@@ -180,13 +179,18 @@ AsynchConnector::AsynchConnector(const Socket& s,
try {
socket.connect(sa);
} catch(std::exception& e) {
- // Defer reporting failure
- startWatch(poller);
+ // Defer reporting failure till we start polling
errMsg = e.what();
- DispatchHandle::call(boost::bind(&AsynchConnector::failure, this, -1, errMsg));
- return;
}
+}
+
+void AsynchConnector::start(Poller::shared_ptr poller)
+{
startWatch(poller);
+ // If we previously detected an error insert failure callback now
+ if ( !errMsg.empty() ) {
+ DispatchHandle::call(boost::bind(&AsynchConnector::failure, this, -1, errMsg));
+ }
}
void AsynchConnector::connComplete(DispatchHandle& h)
@@ -600,13 +604,12 @@ AsynchAcceptor* AsynchAcceptor::create(const Socket& s,
}
AsynchConnector* AsynchConnector::create(const Socket& s,
- Poller::shared_ptr poller,
std::string hostname,
uint16_t port,
ConnectedCallback connCb,
FailedCallback failCb)
{
- return new posix::AsynchConnector(s, poller, hostname, port, connCb, failCb);
+ return new posix::AsynchConnector(s, hostname, port, connCb, failCb);
}
AsynchIO* AsynchIO::create(const Socket& s,