+ /// The pipe server returns false when exiting due to an error
+ bool pipeServer();
+
+ /// Start an overlapped connection
+ bool startPipe(DWORD);
+
+ /// Reset an overlapped connection
+ bool resetPipe(DWORD, bool close_handle = false);
+
+ /// Close event and pipe handles
+ void closeHandles();
+
+ /// Catch pipe ready-to-be-read notification
+ bool event(QEvent *);
+
+ /// Check whether the pipe server must be stopped
+ bool checkStopServer(DWORD timeout = 0);
+
+ /// The filename of a (in or out) pipe instance
+ std::string const pipeName(DWORD) const;
+
+ /// Pipe instances
+ PipeInst pipe_[MAX_PIPES];
+
+ /// Pipe server control events
+ HANDLE event_[MAX_PIPES + 1];
+
+ /// Reply buffer
+ std::string outbuf_;
+
+ /// Synchronize access to outbuf_
+ HANDLE outbuf_mutex_;
+
+ /// Windows event for stopping the pipe server
+ HANDLE stopserver_;
+
+ /// Pipe server thread handle
+ HANDLE server_thread_;