Função ConnectNamedPipe (namedpipeapi.h)
Permite que um processo de servidor de pipe nomeado aguarde um processo de cliente se conectar a uma instância de um pipe nomeado. Um processo de cliente se conecta chamando a função CreateFile ou CallNamedPipe.
Sintaxe
BOOL ConnectNamedPipe(
[in] HANDLE hNamedPipe,
[in, out, optional] LPOVERLAPPED lpOverlapped
);
Parâmetros
[in] hNamedPipe
Um identificador para o final do servidor de uma instância de pipe nomeada. Esse identificador é retornado pela função CreateNamedPipe.
[in, out, optional] lpOverlapped
Um ponteiro para uma estrutura de
Se
Se
Se hNamedPipe não tiver sido aberto com FILE_FLAG_OVERLAPPED, a função não retornará até que um cliente esteja conectado ou ocorra um erro. Operações síncronas bem-sucedidas resultam na função retornando um valor diferente de zero se um cliente se conectar após a função ser chamada.
Valor de retorno
Se a operação for síncrona, ConnectNamedPipe não retornará até que a operação seja concluída. Se a função for bem-sucedida, o valor retornado não será zero. Se a função falhar, o valor retornado será zero. Para obter informações de erro estendidas, chame GetLastError.
Se a operação for assíncrona, ConnectNamedPipe retornará imediatamente. Se a operação ainda estiver pendente, o valor retornado será zero e GetLastError retornará ERROR_IO_PENDING. (Você pode usar a macro HasOverlappedIoCompleted
Se um cliente se conectar antes da função ser chamada, a função retornará zero e GetLastError retornará ERROR_PIPE_CONNECTED. Isso pode acontecer se um cliente se conectar no intervalo entre a chamada para CreateNamedPipe e a chamada para ConnectNamedPipe. Nessa situação, há uma boa conexão entre o cliente e o servidor, mesmo que a função retorne zero.
Observações
Um processo de servidor de pipe nomeado pode usar ConnectNamedPipe com uma instância de pipe recém-criada. Ele também pode ser usado com uma instância que foi conectada anteriormente a outro processo de cliente; nesse caso, o processo do servidor deve primeiro chamar a função DisconnectNamedPipe para desconectar o identificador do cliente anterior antes que o identificador possa ser reconectado a um novo cliente. Caso contrário, ConnectNamedPipe retornará zero e GetLastError retornará ERROR_NO_DATA se o cliente anterior tiver fechado seu identificador ou ERROR_PIPE_CONNECTED se não tiver fechado o identificador.
O comportamento de ConnectNamedPipe depende de duas condições: se o modo de espera do identificador de pipe está definido como bloqueio ou não e se a função está definida para ser executada de forma síncrona ou em modo sobreposto. Um servidor especifica inicialmente o modo de espera de um identificador de pipe na função
O processo do servidor pode usar qualquer uma das funções de espera
Se o identificador de pipe especificado estiver no modo de não desbloqueio, ConnectNamedPipe sempre retornará imediatamente. No modo de não desbloqueio, ConnectNamedPipe retorna um valor diferente de zero na primeira vez que é chamado para uma instância de pipe desconectada de um cliente anterior. Isso indica que o pipe agora está disponível para ser conectado a um novo processo de cliente. Em todas as outras situações em que o identificador de pipe está no modo sem bloqueio, ConnectNamedPipe retorna zero. Nessas situações, GetLastError retornará ERROR_PIPE_LISTENING se nenhum cliente estiver conectado, ERROR_PIPE_CONNECTED se um cliente estiver conectado e ERROR_NO_DATA se um cliente anterior tiver fechado seu identificador de pipe, mas o servidor não tiver se desconectado. Observe que existe uma boa conexão entre o cliente e o servidor somente após o erro de ERROR_PIPE_CONNECTED ser recebido.
Exemplos
Para obter um exemplo, consulte servidor de pipe multithreaded.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows 2000 Professional [aplicativos da área de trabalho | Aplicativos UWP] |
servidor com suporte mínimo | Windows 2000 Server [aplicativos da área de trabalho | Aplicativos UWP] |
da Plataforma de Destino |
Windows |
cabeçalho | namedpipeapi.h |
biblioteca | Kernel32.lib |
de DLL |
Kernel32.dll |
Consulte também
Visão geral do Pipes
SetNamedPipeHandleState