WinSockのイベントまわりのAPIでpoll(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) が書き込み可能である。 |