ConnectNamedPipe 함수(namedpipeapi.h)

명명된 파이프 서버 프로세스가 클라이언트 프로세스가 명명된 파이프의 instance 연결할 때까지 기다릴 수 있도록 합니다. 클라이언트 프로세스는 CreateFile 또는 CallNamedPipe 함수를 호출하여 연결합니다.

구문

BOOL ConnectNamedPipe(
  [in]                HANDLE       hNamedPipe,
  [in, out, optional] LPOVERLAPPED lpOverlapped
);

매개 변수

[in] hNamedPipe

명명된 파이프 instance 서버 끝에 대한 핸들입니다. 이 핸들은 CreateNamedPipe 함수에서 반환됩니다.

[in, out, optional] lpOverlapped

OVERLAPPED 구조에 대한 포인터입니다.

hNamedPipe가 FILE_FLAG_OVERLAPPED 열린 경우 lpOverlapped 매개 변수는 NULL이 아니어야 합니다. 유효한 OVERLAPPED 구조를 가리킵니다. hNamedPipe가 FILE_FLAG_OVERLAPPED 사용하여 열렸고 lpOverlappedNULL인 경우 함수는 연결 작업이 완료되었음을 잘못 보고할 수 있습니다.

hNamedPipe가 FILE_FLAG_OVERLAPPED 사용하여 만들어졌고 lpOverlappedNULL이 아닌 경우 OVERLAPPED 구조에는 수동 재설정 이벤트 개체(CreateEvent 함수를 사용하여 서버에서 만들 수 있음)에 대한 핸들이 포함되어야 합니다.

hNamedPipe가 FILE_FLAG_OVERLAPPED 사용하여 열리지 않은 경우 클라이언트가 연결되거나 오류가 발생할 때까지 함수가 반환되지 않습니다. 동기 작업이 성공하면 함수가 호출된 후 클라이언트가 연결하는 경우 함수가 0이 아닌 값을 반환합니다.

반환 값

작업이 동기식이면 작업이 완료될 때까지 ConnectNamedPipe 가 반환되지 않습니다. 함수가 성공하면 반환 값이 0이 아닙니다. 함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

작업이 비동기인 경우 ConnectNamedPipe는 즉시 반환됩니다. 작업이 아직 보류 중인 경우 반환 값은 0이고 GetLastError 는 ERROR_IO_PENDING 반환합니다. HasOverlappedIoCompleted 매크로를 사용하여 작업이 완료된 시기를 확인할 수 있습니다. 함수가 실패하면 반환 값은 0이고 GetLastError는 ERROR_IO_PENDING 또는 ERROR_PIPE_CONNECTED 이외의 값을 반환합니다.

함수가 호출되기 전에 클라이언트가 연결되면 함수는 0을 반환하고 GetLastError 는 ERROR_PIPE_CONNECTED 반환합니다. 이 문제는 클라이언트가 CreateNamedPipe 호출과 ConnectNamedPipe 호출 사이의 간격으로 연결하는 경우에 발생할 수 있습니다. 이 경우 함수가 0을 반환하더라도 클라이언트와 서버 간에 좋은 연결이 있습니다.

설명

명명된 파이프 서버 프로세스는 새로 만든 파이프 instance ConnectNamedPipe를 사용할 수 있습니다. 이전에 다른 클라이언트 프로세스에 연결된 instance 사용할 수도 있습니다. 이 경우 서버 프로세스는 먼저 DisconnectNamedPipe 함수를 호출하여 핸들을 새 클라이언트에 다시 연결하기 전에 이전 클라이언트에서 핸들의 연결을 끊어야 합니다. 그렇지 않으면 ConnectNamedPipe는 0을 반환하고, 이전 클라이언트가 핸들을 닫은 경우 GetLastError 는 ERROR_NO_DATA 반환하거나 핸들을 닫지 않은 경우 ERROR_PIPE_CONNECTED 반환합니다.

ConnectNamedPipe의 동작은 파이프 핸들의 대기 모드가 차단 또는 차단 해제로 설정되어 있는지 여부와 함수가 동기적으로 실행되도록 설정되었는지 또는 겹치는 모드로 설정되어 있는지에 따라 달라집니다. 서버는 처음에 CreateNamedPipe 함수에서 파이프 핸들의 대기 모드를 지정하고 SetNamedPipeHandleState 함수를 사용하여 변경할 수 있습니다.

서버 프로세스는 대기 함수 또는 SleepEx를 사용하여 이벤트 개체의 상태가 신호를 받은 시기를 확인하고 HasOverlappedIoCompleted 매크로를 사용하여 ConnectNamedPipe 작업이 완료되는 시기를 확인할 수 있습니다.

지정된 파이프 핸들이 차단 해제 모드인 경우 ConnectNamedPipe는 항상 즉시 반환됩니다. 비블로킹 모드에서 ConnectNamedPipe는 이전 클라이언트와 연결이 끊어진 파이프 instance 대해 처음 호출될 때 0이 아닌 값을 반환합니다. 이는 이제 파이프를 새 클라이언트 프로세스에 연결할 수 있음을 나타냅니다. 파이프 핸들이 차단 해제 모드인 다른 모든 상황에서 ConnectNamedPipe 는 0을 반환합니다. 이러한 상황에서 GetLastError 는 클라이언트가 연결되지 않은 경우 ERROR_PIPE_LISTENING 반환하고, 클라이언트가 연결되어 있는지 ERROR_PIPE_CONNECTED, 이전 클라이언트가 파이프 핸들을 닫았지만 서버 연결이 끊어지지 않은 경우 ERROR_NO_DATA. 클라이언트와 서버 간의 좋은 연결은 ERROR_PIPE_CONNECTED 오류가 수신된 후에만 존재합니다.

참고 비 차단 모드는 Microsoft LAN Manager 버전 2.0과의 호환성을 위해 지원되며 명명된 파이프를 사용하여 비동기 입력 및 출력(I/O)을 달성하는 데 사용하면 안 됩니다.
 
Windows 10 버전 1709: 파이프는 앱 컨테이너 내에서만 지원됩니다. 즉, 한 UWP 프로세스에서 동일한 앱의 일부인 다른 UWP 프로세스까지 지원됩니다. 또한 명명된 파이프는 파이프 이름에 '\\.\pipe\LOCAL\' 구문을 사용해야 합니다.

예제

예제는 다중 스레드 파이프 서버를 참조하세요.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 namedpipeapi.h
라이브러리 Kernel32.lib
DLL Kernel32.dll

참고 항목

CallNamedPipe

CreateEvent

CreateFile

CreateNamedPipe

DisconnectNamedPipe

GetOverlappedResult

OVERLAPPED

파이프 함수

파이프 개요

SetNamedPipeHandleState

SleepEx