前提・実現したいこと
Winsock2を使用して、サーバークライアントを作成します。
tcp/ip streamでデータを送受信します。
サーバーは、コンソールアプリケーションで
サービスに登録して起動させる予定です。
サーバー側の処理としては、
socketを作成し、
bind⇒listenで待機し、
accceptしてきたクライアントごとに
1.接続ソケットにWSACreateEvent()でイベントを作成し、
2.WSAEventSelectでFD_READ、FD_CLOSEのイベントを検知するようにして
3.WSAWaitForMultipleEvents(nEvents, &hEvents, FALSE, 500, FALSE)で待機。
というWSACreateEvent/WSAEventSelect/WSAWaitForMultipleEvents
を使用しようと思っています。
ですがWSAWaitForMultipleEventsでは、
イベントオブジェクトハンドルの最大数はWSA_MAXIMUM_WAIT_EVENTS(=64)で
nEventは64までしか管理できないとありました。
今回、100以上のクライアント接続を要求されています。
一般的には、クライアントごとにThreadを作成して処理するとありましたが、
例えば、クライアントが接続してきた場合、クライアントにつき1つThreadを作成し、
クライアントThread内で、
1,2を接続ソケットに処理し、
3.WSAWaitForMultipleEvents(1,&hEvents, FALSE, TIMEWAIT_TCP, FALSE)
で1つのハンドルについて待機し送受信データを処理する。
このThreadを100以上作成することは可能なのでしょうか?
もし、クライアントが100以上の場合、WSACreateEvent/WSAWaitForMultipleEventsを使用するには、どのように処理するのが適切なのでしょうか?
参考のサイトなどありましたら教えていただけませんでしょうか?
開発環境は、VisualStudio 2017 VC++ です。
あなたの回答
tips
プレビュー