Función ConnectNamedPipe (namedpipeapi.h)
Permite que un proceso de servidor de canalización con nombre espere a que un proceso de cliente se conecte a una instancia de una canalización con nombre. Un proceso de cliente se conecta llamando a la función CreateFile o CallNamedPipe.
Sintaxis
BOOL ConnectNamedPipe(
[in] HANDLE hNamedPipe,
[in, out, optional] LPOVERLAPPED lpOverlapped
);
Parámetros
[in] hNamedPipe
Identificador del extremo del servidor de una instancia de canalización con nombre. Este identificador lo devuelve la función CreateNamedPipe.
[in, out, optional] lpOverlapped
Puntero a una estructura
Si hNamedPipe se abrió con FILE_FLAG_OVERLAPPED, el parámetro lpOverlapped no debe ser null. Debe apuntar a una estructura de
Si
Si hNamedPipe no se abrió con FILE_FLAG_OVERLAPPED, la función no devuelve hasta que se conecta un cliente o se produce un error. Las operaciones sincrónicas correctas provocan que la función devuelva un valor distinto de cero si un cliente se conecta después de llamar a la función.
Valor devuelto
Si la operación es sincrónica, connectNamedPipe no devuelve hasta que se haya completado la operación. Si la función se ejecuta correctamente, el valor devuelto es distinto de cero. Si se produce un error en la función, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
Si la operación es asincrónica, ConnectNamedPipe devuelve inmediatamente. Si la operación sigue pendiente, el valor devuelto es cero y GetLastError devuelve ERROR_IO_PENDING. (Puede usar la macro HasOverlappedIoCompleted para determinar cuándo ha finalizado la operación). Si se produce un error en la función, el valor devuelto es cero y GetLastError devuelve un valor distinto de ERROR_IO_PENDING o ERROR_PIPE_CONNECTED.
Si un cliente se conecta antes de llamar a la función, la función devuelve cero y GetLastError devuelve ERROR_PIPE_CONNECTED. Esto puede ocurrir si un cliente se conecta en el intervalo entre la llamada a CreateNamedPipe y la llamada a ConnectNamedPipe. En esta situación, hay una buena conexión entre el cliente y el servidor, aunque la función devuelve cero.
Observaciones
Un proceso de servidor de canalización con nombre puede usar ConnectNamedPipe con una instancia de canalización recién creada. También se puede usar con una instancia que se conectó anteriormente a otro proceso de cliente; en este caso, el proceso de servidor primero debe llamar a la función DisconnectNamedPipe para desconectar el identificador del cliente anterior antes de que el identificador se pueda volver a conectar a un nuevo cliente. De lo contrario, connectNamedPipe devuelve cero y GetLastError devuelve ERROR_NO_DATA si el cliente anterior ha cerrado su identificador o ERROR_PIPE_CONNECTED si no ha cerrado su identificador.
El comportamiento de ConnectNamedPipe depende de dos condiciones: si el modo de espera del controlador de canalización está establecido en bloquear o no bloquear y si la función está establecida para ejecutarse de forma sincrónica o en modo superpuesto. Inicialmente, un servidor especifica el modo de espera de un controlador de canalización en la función createNamedPipe de
El proceso de servidor puede usar cualquiera de las funciones de espera de
Si el identificador de canalización especificado está en modo de no bloqueo, ConnectNamedPipe siempre devuelve inmediatamente. En el modo de no bloqueo, ConnectNamedPipe devuelve un valor distinto de cero la primera vez que se llama para una instancia de canalización que está desconectada de un cliente anterior. Esto indica que la canalización ahora está disponible para conectarse a un nuevo proceso de cliente. En todas las demás situaciones en las que el controlador de canalización está en modo de bloqueo, ConnectNamedPipe devuelve cero. En estas situaciones, GetLastError devuelve ERROR_PIPE_LISTENING si no hay ningún cliente conectado, ERROR_PIPE_CONNECTED si un cliente está conectado y ERROR_NO_DATA si un cliente anterior ha cerrado su identificador de canalización, pero el servidor no se ha desconectado. Tenga en cuenta que existe una buena conexión entre el cliente y el servidor solo después de recibir el error ERROR_PIPE_CONNECTED.
Ejemplos
Para obtener un ejemplo, vea servidor de canalización multiproceso.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows 2000 Professional [aplicaciones de escritorio | Aplicaciones para UWP] |
servidor mínimo admitido | Windows 2000 Server [aplicaciones de escritorio | Aplicaciones para UWP] |
de la plataforma de destino de |
Windows |
encabezado de |
namedpipeapi.h |
biblioteca de |
Kernel32.lib |
DLL de |
Kernel32.dll |
Consulte también
funciones de canalización de
de información general de canalizaciones de