void AsioSessionState::close() { Lock lock(mSessionPtr->mDisableIoMutex); if (!mSessionPtr->mDisableIo) { implClose(); mSessionPtr->mDisableIo = true; } }
void Win32NamedPipeClientTransport::implConnectAsync( ClientTransportCallback &clientStub, unsigned int timeoutMs) { RCF_UNUSED_VARIABLE(timeoutMs); implClose(); mpClientStub = &clientStub; HANDLE hPipe = INVALID_HANDLE_VALUE; hPipe = CreateFile( mPipeName.c_str(), // pipe name GENERIC_READ | // read and write access GENERIC_WRITE, 0, // no sharing mpSec, // default security attributes OPEN_EXISTING, // opens existing pipe FILE_FLAG_OVERLAPPED, // non-blocking NULL); // no template file DWORD dwErr = GetLastError(); RecursiveLock lock(mOverlappedPtr->mMutex); mOverlappedPtr->mOpType = OverlappedAmi::Connect; if (hPipe != INVALID_HANDLE_VALUE) { mhPipe = hPipe; if (mpIoService) { mSocketPtr.reset( new AsioPipeHandle(*mpIoService, mhPipe) ); mAsioTimerPtr.reset( new AsioDeadlineTimer(getAmiThreadPool().getIoService()) ); } AsioErrorCode ec; //AmiIoHandler(mOverlappedPtr, ec)(); mpIoService->post( AmiIoHandler(mOverlappedPtr, ec) ); } else { AsioErrorCode ec( dwErr, ASIO_NS::error::get_system_category()); mpIoService->post( AmiIoHandler(mOverlappedPtr, ec) ); } }
void AsioSessionState::close() { RCF2_TRACE("")(this); Lock lock(mMutex); if (!mHasBeenClosed) { implClose(); mDemuxerPtr.reset(); mHasBeenClosed = true; } }