summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/sys/windows/AsynchIO.cpp
diff options
context:
space:
mode:
authorStephen D. Huston <shuston@apache.org>2009-10-20 17:10:05 +0000
committerStephen D. Huston <shuston@apache.org>2009-10-20 17:10:05 +0000
commitfcc8f328bbac4a318dbe8cdead8de256dac8517d (patch)
tree567494b9897a70058f8bb013414e17232a80835a /cpp/src/qpid/sys/windows/AsynchIO.cpp
parent93a716f5fd3426fc0c476f7089d81ec67ba16a32 (diff)
downloadqpid-python-fcc8f328bbac4a318dbe8cdead8de256dac8517d.tar.gz
Carry over recent AsynchIO-level changes to Windows.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@827735 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/sys/windows/AsynchIO.cpp')
-rw-r--r--cpp/src/qpid/sys/windows/AsynchIO.cpp56
1 files changed, 25 insertions, 31 deletions
diff --git a/cpp/src/qpid/sys/windows/AsynchIO.cpp b/cpp/src/qpid/sys/windows/AsynchIO.cpp
index 971f0bb665..c4f67ddf70 100644
--- a/cpp/src/qpid/sys/windows/AsynchIO.cpp
+++ b/cpp/src/qpid/sys/windows/AsynchIO.cpp
@@ -74,6 +74,7 @@ void lookUpAcceptEx() {
namespace qpid {
namespace sys {
+namespace windows {
/*
* Asynch Acceptor
@@ -88,13 +89,13 @@ namespace sys {
* and status of each accept operation outstanding.
*/
-class AsynchAcceptorPrivate {
+class AsynchAcceptor : public qpid::sys::AsynchAcceptor {
friend class AsynchAcceptResult;
public:
- AsynchAcceptorPrivate(const Socket& s, AsynchAcceptor::Callback callback);
- ~AsynchAcceptorPrivate();
+ AsynchAcceptor(const Socket& s, AsynchAcceptor::Callback callback);
+ ~AsynchAcceptor();
void start(Poller::shared_ptr poller);
private:
@@ -104,19 +105,7 @@ private:
const Socket& socket;
};
-AsynchAcceptor::AsynchAcceptor(const Socket& s, Callback callback) :
- impl(new AsynchAcceptorPrivate(s, callback))
-{}
-
-AsynchAcceptor::~AsynchAcceptor()
-{ delete impl; }
-
-void AsynchAcceptor::start(Poller::shared_ptr poller) {
- impl->start(poller);
-}
-
-AsynchAcceptorPrivate::AsynchAcceptorPrivate(const Socket& s,
- AsynchAcceptor::Callback callback)
+AsynchAcceptor::AsynchAcceptor(const Socket& s, Callback callback)
: acceptedCallback(callback),
socket(s) {
@@ -128,16 +117,17 @@ AsynchAcceptorPrivate::AsynchAcceptorPrivate(const Socket& s,
#endif
}
-AsynchAcceptorPrivate::~AsynchAcceptorPrivate(void) {
+AsynchAcceptor::~AsynchAcceptor()
+{
socket.close();
}
-void AsynchAcceptorPrivate::start(Poller::shared_ptr poller) {
+void AsynchAcceptor::start(Poller::shared_ptr poller) {
poller->monitorHandle(PollerHandle(socket), Poller::INPUT);
restart ();
}
-void AsynchAcceptorPrivate::restart(void) {
+void AsynchAcceptor::restart(void) {
DWORD bytesReceived = 0; // Not used, needed for AcceptEx API
AsynchAcceptResult *result = new AsynchAcceptResult(acceptedCallback,
this,
@@ -156,7 +146,7 @@ void AsynchAcceptorPrivate::restart(void) {
AsynchAcceptResult::AsynchAcceptResult(AsynchAcceptor::Callback cb,
- AsynchAcceptorPrivate *acceptor,
+ AsynchAcceptor *acceptor,
SOCKET listener)
: callback(cb), acceptor(acceptor), listener(listener) {
newSocket.reset (new Socket());
@@ -174,13 +164,11 @@ void AsynchAcceptResult::success(size_t /*bytesTransferred*/) {
}
void AsynchAcceptResult::failure(int status) {
- //if (status != WSA_OPERATION_ABORTED)
- // Can there be anything else? ;
- delete this;
+ //if (status != WSA_OPERATION_ABORTED)
+ // Can there be anything else? ;
+ delete this;
}
-namespace windows {
-
/*
* AsynchConnector does synchronous connects for now... to do asynch the
* IocpPoller will need some extension to register an event handle as a
@@ -224,6 +212,12 @@ AsynchConnector::AsynchConnector(const Socket& sock,
} // namespace windows
+AsynchAcceptor* AsynchAcceptor::create(const Socket& s,
+ Callback callback)
+{
+ return new windows::AsynchAcceptor(s, callback);
+}
+
AsynchConnector* qpid::sys::AsynchConnector::create(const Socket& s,
Poller::shared_ptr poller,
std::string hostname,
@@ -231,12 +225,12 @@ AsynchConnector* qpid::sys::AsynchConnector::create(const Socket& s,
ConnectedCallback connCb,
FailedCallback failCb)
{
- return new qpid::sys::windows::AsynchConnector(s,
- poller,
- hostname,
- port,
- connCb,
- failCb);
+ return new windows::AsynchConnector(s,
+ poller,
+ hostname,
+ port,
+ connCb,
+ failCb);
}