linux select
を使用してノンブロッキングソケットIOリアクタを実装しています。たとえば、サーバーとクライアントが通信しているとします。クライアントまたはサーバーがダウンしている場合、もう一方の側はread
コール(C関数呼び出し)の戻り値によって伝えることができるEOF
を受け取ることになっています。EOFを使用した非ブロッキングソケットIOの多重化
if(read(fd, ...) == 0) { printf("Endpoint connection failed\n"); }
私の質問は、このEOF
イベントで読み取り重なったり、他のデータとマージされますか?たとえば、クライアントは1 byte
をサーバーに送信し、誤ってすぐにシャットダウンします。時間が非常に近い場合、サーバ上のread
はまだ1 byte
とEOF
に分離可能ですか?
あなたがLinuxを使っていることが分かっているなら、 'select'を避けて代わりに' epoll'を使うことをお勧めします。あるいは、 'libev'のようなイベントライブラリを考えてみてください。私はこれらのことをやり直すのが大好きなので[私自身のフレームワーク](https://github.com/boazsegev/c-server-tools)を書いています。あなたは一見を持つことができます。 – Myst