2012-09-18 6 views
3

소켓 정글을 통해 자신을 처리하고 I/O가 중복 된 비 블로킹 소켓을 발견했습니다. 나는이 개념에 대해서만 언급하고 있지만 실제로 그것을 설명하지 않거나 어떤 예를 든다고하는 집에서 3 권의 책을 가지고있다.I/O가 중첩 된 비 블로킹 소켓

그래서 내가 찾고있는 것은 기사를 통해 설명 할 수있는 예제이거나 예제를 통해 설명 할 수 있습니다. 이것이 창문에 도움이된다면 좋겠지 만, 유닉스에서도 그것을 옮길 수 있어야한다고 생각합니다.

나는 책을 출처로 생각하지 않지만 다른 50 $를 피할 수있어서 기쁩니다. 지금까지 나는 다른 소켓 모델과의 기본적인 개념과 기본 비교만을 발견했습니다. 내가 그들의 개념을 이해하지 못하는 것은 아니지만, 나는 그것들을 실제로 보아서 그들이 어떻게 일하는가에 대한 좋은 설명을 얻고 싶다. (나는 긴 기사를 전혀 신경 쓸 필요가 없다.)

+0

내 첫 번째 생각은 오버랩 된 I/O를 이해하는 것입니다. 매우 구체적인 의미가 있습니다 : http://en.wikipedia.org/wiki/Overlapped_I/O 그 기사를 읽으십시오. –

+0

다음으로 I/O 완료 포트가 무엇인지 알아야합니다. http://en.wikipedia.org/wiki/Input_output_completion_port –

+1

C++의 소켓에 대한 플랫폼 독립적 인 분석은 Boost.Asio에 최소한의 요약 정보를 포함해야합니다 (내 의견으로!) http://www.boost.org/doc/libs/1_51_0/doc/html/boost_asio.html – Nick

답변

2

문구 '비 차단 소켓'은 일반적으로 FIONBIO 소켓 옵션을 사용하는 것으로, read()를 호출하면 아무런 응답이없는 경우에도 즉시 반환된다. 데이터를 읽을 준비가되었습니다. (EWOULDBLOCK 오류와 함께 반환됩니다.)

중복 된 I/O는 Windows API와 관련이 있습니다 (예 : UNIX에서는 사용할 수 없음). FIONBIO 소켓 옵션은 이 아니고이 아니라 전통적인 버클리 소켓 API 함수 호출 (read() 등)도 아닙니다.

(리눅스에서 POSIX와 동등한를 들어, 당신의 마음에 드는 검색 엔진에 '남자 AIO'또는 형 남자 AIO. 참조) 이제 '비 블로킹 소켓'와 'I를 겹쳐 있음을 이해

/O '는 서로 다른 두 가지 접근법 (혼합되지 않음)이며, 각각에 유용한 자료를 찾는 것이 훨씬 쉬워야합니다.

중복 된 I/O에 대한 MSDN 설명서는 실제로 매우 좋습니다. Windows 프로그래밍을 수행하는 경우 성능 및 확장성에 중요한 부분에 대해 중복 된 I/O를 사용해야합니다. 여기에 좋은 출발점입니다 :

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365603%28v=vs.85%29.aspx

또한 (이 MSDN 기사가 파이프에 대해이지만,이 소켓을 사용하여 정확히 동일합니다.)

,와 WaitForMultipleObjects는()로 확장되지 않는 점에 유의 I/O 완료 포트를 사용하는 것이 좋지만 이전 포트를 먼저 사용하는 것이 편리합니다.