pollのエミュレートを考え中…

WinSockのイベントまわりのAPIpoll(2)をエミュレートできないか考え中。
WinSock.hに定義されているかもしれないpollfdと定数はマクロで再定義できそうだし、WSAWaitForMultipleEvents()はイベントの数じゃなくてインデックスを返すけど不要なイベントは無視してもらうってことで、何とかなりそう。
問題はイベントのマッピングかな?

poll(2)

POLLIN 読み出し可能なデータがある。
POLLPRI 読み出し可能な緊急データ (urgent data) がある (例えば、TCP ソケットの帯域外 (out-of-band data) データを受信した場合や、パケットモードの擬似端末のマスタがスレーブ側の変化を見つけたとき)。
POLLOUT 書き込みが停止 (block) しない状態である。
POLLRDHUP ストリームソケットの他端が、コネクションを close したか、コネクションの書き込み側を shutdown した。この定義を有効にするには、 _GNU_SOURCE 機能検査マクロを定義しなければならない。
POLLERR エラー状態 (出力の場合のみ)。
POLLHUP ハングアップした (出力の場合のみ)。
POLLNVAL 不正な要求: fd がオープンされていない (出力の場合のみ)。
POLLRDNORM POLLIN と同じ。
POLLRDBAND 優先帯域データ (priority band data) が読み出し可能である (普通は Linux では使用されない)。
POLLWRNORM POLLOUT と同じ。
POLLWRBAND 優先帯域データ (priority data) が書き込み可能である。

WinSock

FD_READ 読み出し可能
FD_WRITE 書き出し可能
FD_OOB 帯域外のデータを読み出し可能
FD_ACCEPT accept可能?
FD_CONNECT connect可能?
FD_CLOSE close可能?
FD_QOS QOSデータ関係?
FD_GROUP_QOS QOSデータ関係?
FD_ROUTING_INTERFACE_CHANGE ルーティングの変更?
FD_ADDRESS_LIST_CHANGE アドレスリストの変更?
FD_ALL_EVENTS 全てのイベント


じっと定数を見る。