블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

Notice

04-30 01:33

Recent Post

Recent Comment

Recent Trackback

Archive

2015. 5. 11. 15:57 Programming/Network

작성날짜    : 2011-03-17


참고 : JoinC - CreateIoCompletionPort

         socket WSASocket의 차이 - http://kldp.org/node/102187



CreateIoCompletionPort

 함수는 지정된 파일에 대해서 Input/Output completion port (이하 입출력 완료 포트) 만든다혹은 완료 포트를 만들어 놓은 다음 나중에 파일을 완료 포트에 파일을 지정할  있다이하 입출력 완료 포트에 파일을 지정하는 작업은 등록이라고 하겠다.

열린 파일을 입출력 완료 포트에 등록하면프로세스가 비동기적으로 입출력 완료 보고를 통지 받을  있다. 

사용 

HANDLE WINAPI CreateIoCompletionPort(

  __in      HANDLE FileHandle,

  __in_opt  HANDLE ExistingCompletionPort,

  __in      ULONG_PTR CompletionKey,

  __in      DWORD NumberOfConcurrentThreads

);

 

  1. FileHandle

열린 파일 혹은 INVALID_HANDLE_VALUE핸들은 반드시 중첩 입출력을 지원하는 객체여야 한다. 

  1. ExistingCompletionPort 

이미 만들어진 입출력 완료 포트 혹은 NULL. 만약 매개 변수로 이미 만들어진 입출력 완료포트를 지정하면 함수는 FileHandle 입출력 완료 포트에 등록한다만약 NULL 입력하면 새로운 입출력 완료 포트를 만들고 여기에 FileHandle 등록한다. 

  1. CompletionKey

입출력 완료 포트 핸들 가리키는  유저가 정의한 값이다매개 변수는 ULONG 타입이므로부가적인 정보를 함께 넘길  있다. 

  1. NumberOfConcurrentThread

입출력 완료 포트의 처리를 위해서 몇개의 스레드를 할당할 것인가를 지정한다.

반환 

 함수는 성공하면 입출력 완료 포트를 가리키는 핸들을 반환한다.

  • 만약 ExistingCompletionPort NULL이라면 새로운 핸들을 반환한다. 
  • 만약 ExistingCompletionPort NULL 아니라면매개 변수로 입력한 핸들과 같은 핸들을 반환한다. 

만약 실패하면 NULL 반환한다에러는 GetLastError으로 가져올  있다.

 

 

설명

입출력 완료 포트는 등록된 핸들의 입출력이 완료되면 완료 보고정보를 큐에 쌓는다입출력 완료 포트 핸들은 프로세스에 종속되며다른 프로세스와 공유할  없다물론 같은 프로세스의 스레들 간에는 공유할  있다.

CreateIoCompletionPort 다음의 3가지 모드가 있다.

  • 파일 핸들의 등록없이단지 입출력 완료 포트만 있다. 
  • 존재하는 입출력 완료 포트에 파일 핸들을 등록한다. 
  • 입출력 완료 포트를 새로 만들고 파일 핸들까지 등록한다.

파일 핸들이 등록되지 않은 입출력 완료 포트는 해들 값에 INVALID_HANDLE_VALUE 지정하고, ExistingcompletionPort NULL, CompletionKey 0으로 함으로써 만들  있다.

등록하는 파일 핸들은 overlapped 속성을 가지고 있어야 한다중첩 속성을 가지도록 하는 가장 일반적인 방법은 CreateFile함수를FILE_FLAG_OVERLAPPED으로 실행하는 것이다핸들이 소켓 경우에도 중첩 속성을 가지고 있어야 한다. socket함수로 만든 소켓은 기본적으로 중첩 속성을 가진다.

하나의 입출력 완료 포트는 여러 개의 파일 핸들을 처리할  있다.


'Programming > Network' 카테고리의 다른 글

[Network] IPv4 Stack  (0) 2015.05.11
[Network] IPC  (0) 2015.05.11
[Network] connect  (0) 2015.05.11
[Network] listen()  (0) 2015.05.11
[Network] SOCKADDR_IN  (0) 2015.05.11
posted by Kanais