Ejemplo n.º 1
0
    Win32NamedPipeServerTransport::Win32NamedPipeServerTransport(
        const tstring & pipeName) :
            IocpServerTransport(),
            mpSec(RCF_DEFAULT_INIT),
            mQueuedAccepts(RCF_DEFAULT_INIT),
            mPipeNameLock(INVALID_HANDLE_VALUE)
    {
        if (pipeName.empty())
        {
            // Generate a pipe name dynamically, that won't conflict with any
            // other test executables that may be running concurrently.

            std::pair<tstring, HANDLE> pipeAndHandle = generateNewPipeName();
            mPipeName = pipeAndHandle.first + RCF_T("_0");
            mPipeNameLock = pipeAndHandle.second;
        }
        else
        {
            if (pipeName.at(0) == RCF_T('\\'))
            {
                mPipeName = pipeName;
            }
            else
            {
                mPipeName = RCF_T("\\\\.\\pipe\\") + pipeName;
            }
        }
    }
    TransportPair UnixLocalTransportFactory::createTransports()
    {
        std::string pipeName = generateNewPipeName();

        RCF_LOG_2()(pipeName) << "Creating unix local socket transport pair";

        return std::make_pair(
            ServerTransportPtr( new UnixLocalServerTransport(pipeName) ),
            ClientTransportAutoPtrPtr(
                new ClientTransportAutoPtr(
                    new UnixLocalClientTransport(pipeName))));
    }