2011-03-18 12 views
1

다시!더 많은 Poll()? 님의

저는 윈도우에서 select()를 사용하여 비동기 소켓 프로그래밍을 해왔으며, 꽤 잘 작동하고 있습니다. 그러나 최대 1024 개의 클라이언트까지만 확장 가능합니다 .Poll()은 그 한계를 극복 할 수있는 방법이며, 리눅스와 유닉스 모두에서 작동한다는 것을 알고 있습니다. 하지만 그것은 올바른 Windows 시스템에서 작동하지 않습니다?

WsaPoll()에 대해 읽었습니다. 정확히 동일한 기능을 가지고 있습니까? 라이브러리를 사용하려면 어떤 라이브러리를 링크해야합니까?

FD_SETSIZE가있는 창에서 소켓 번호를 안전하게 늘릴 수 있습니까? 제 최종 프로그램은 리눅스 서버에 있습니다. 그러나 지금은 Windows 시스템에서 테스트하고 있습니다. 내 테스트 머신을 리눅스 박스로 바꿔야 하나? (아마 어쨌든 갈 것입니다)

그렇지 않으면 windows와 함께 사용하는 것이 좋습니다까요?

+1

ASIO를 사용하지 마십시오. 읽을 수있는 코드가 더 좋습니다. –

답변

3

poll() 같은 WSAPoll() 동작합니다 (모든 질문에 대한 미안, 난 내 자신에 대한 연구를하고있는 중이 야, 나는 = D 약속). 무엇이 잘못되었는지 알아 보려면 WSAGetLastError을 사용해야합니다. 오류 코드는 일치하지 않으며 WindowsSDK 및 시스템 버전에 따라 posix 코드가 winsock2 헤더에 정의되어 있거나 정의되어 있지 않을 수 있습니다.

WSAPoll을 사용하려면 winsock2.h를 포함시켜 ws2_32.lib에 연결하고 Windows Vista/Server 2008 이상에서 응용 프로그램을 실행해야합니다.

코드에 WSAPoll을 포함한다고해서 Windows XP에서 컴파일되는 것을 항상 막을 수는 없으며 응용 프로그램을 시작할 때 오류가 발생합니다.

Windows에서 응용 프로그램을 실행하지 않으려면 SDK, 빌드, DLL 및 Windows 버전의 문제를 건너 뛰고 개발할 Linux VM을 설정하는 것이 좋습니다.

+1

알았어, 그게 내가 생각했던거야. 확인해 줘서 고마워. 난 그냥 리눅스 배포판을 설치합니다, 나는 잠시 동안 필요했습니다. – ultifinitus

1

WSAAsyncSelect은 단일 스레드에서 수천 개의 소켓 이벤트를 처리 할 수 ​​있어야합니다.

+0

고마워요! 얼마나 확장 성이 있는지 확신하지 못했습니다! – ultifinitus

2

libevent은 Windows, Linux, Solaris, OS X 및 모든 BSD 파생 제품에서 이벤트 기반 프로그래밍에 사용할 수있는 최상의 메커니즘을 사용합니다.