Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

ConnectNamedPipe

서버에서 네임드 파이프로 연결하는 클라이언트 프로세스를 기다린다. 클라이언트 프로세스가 연결하면 네임드 파이프의 인스턴스를 반환한다. 클라이언트 프로세스는 CreateFile(:4200) 혹은 CallnamedPipe(:4200)으로 연결 요청을 한다.

사용법

BOOL WINAPI ConnectNamePipe
(
    __in                HANDLE  hNamePipe,
    __inout_opt   LPOVERLAPPED lpOverlapped
);

매개 변수

  • hNamePipe
CreteNamedPipe(:4200)함수로 만들어진 파이프 핸들러
  • lpOverlapped
OVERLAPPED 구조체의 포인터.

만약 hNamedPipe가 FILE_FLAG_OVERLAPPED로 열렸다면, lpOverlapped가 NULL이 되어서는 안된다.

반환 값

동기 모드에서 ConnectNamedPipe는 연결이 이루어지기 전까지 반환하지 않고 기다린다. 만약 함수가 성공하면 0이 아닌 값을 반환한다. 실패하면 0을 반환한다. 에러코드는 GetLastError(:4200)함수의 반환 값으로 확인하면 된다.

비동기 모드에서 ConnectNamedPipe함수는 즉시 반환한다. 데이터를 기다리고 있는 중이라면 0을 반환하고 GetLastError함수는 ERROR_IO_PENDING를 반환한다. GetOverlappedResult(:4200)함수로 완료된 데이터를 가져올 수 있다.

상세 설명

네임드 파이프 서버 프로세스는 ConnectNamedPipe로 새로운 파이프의 인스턴스를 할당한다. 리눅스의 네임드 파이프가 파일을 가리키는 파일 지정 번호를 반환하는 것과 차이가 있다. 인스턴스를 반환하기 때문에, 곧 바로 다른 클라이언트를 기다릴 수 있다. 이러한 특징으로 서버/클라이언트 환경을 쉽게 구성할 수 있다. 윈도 네임드 파이프는 Unix:::Domain:::Socket(:12)대신 사용하기도 한다.

만약 파이프가 비봉쇄 모드라면, ConnectNamedPipe는 즉시 반환한다. 비봉쇄 모드에서 ConnectNamedPipe는 클라이언트의 연결로 파이프 인스턴스가 만들어진 최초에만 0이 아닌 값을 반환하고, 다른 모든 경우에는 0을 반환한다. 이 값을 측정해서 클라이언트 연결인지 아닌지를 확인할 수 있다.

다음과 같은 GetLastError 반환 값들이 있다.
  • ERROR_PIPE_LISTENINT : 연결한 클라이언트가 없다.
  • ERROR_PIPE_CONNECTED : 클라이언트가 연결했다.
  • ERROR_NO_DATA : 이전의 클라이언트가 연결을 종료 했으나, 아직 서버가 연결을 종료하지 않았다.

예제