第十六回スパルタンプログラミング
何がしたいか?何が問題か?を意識して変なとこでぐだぐだ考えないこと
30分悩んで分からなかったら、早めにヘルプを出す。
やりたいこと
macosxでsocketに対してaio_readが動作しないので、socket fdをfcntlでNONBLOCKにしselectでさばく方針に戻る(りたい?)。
(なんか、大分遠回りをしたような。。プログラムの調べ方とかが分かったので、よしとしよう。)
またsocketはマルチスレッドで扱いたい。
マルチスレッドでどうやる?
マルチスレッドを使い、
- listen socket(クライアントがconnectかけるポートと対応)を扱うスレッド
- acceptの実行、それにより生成されるsocketを扱うスレッド
に分けて実装してみようと思う。
最初は2.のaccept実行を1.でやろうと考えていたのだけれど、生成されるfdの管理がスレッド間にまたがると競合が起きると想像した。
競合すると、mutexを使わなければならず煩雑で嫌だー!(アクセスが多い場合にボトルネックになりそうだ)と思い、上記でやろうと思う。
懸念点は?
同一socketを複数スレッドのacceptで監視することは可能なのか?という懸念が残るが、 Can I call accept() for one socket from several threads simultaneously?を読むと何やらいけそう。