1

私はネットワークプログラミングの初心者で、epollについて聞いたことがあります。いくつかのチュートリアルを読んだところ、epollの機能と、これを実装する方法についての基本的なアイデアが得られました。

問題は、クライアントがudp接続を使用する場合でも、epollを使用できるかどうかです。私が読んだすべてのチュートリアルは、TCP接続を使用していました。

また、epollを使用したマルチスレッドベースのサーバー実装を説明する優れたチュートリアルまたはサンプルコードはありますか?私がオンラインから入手したこれらのチュートリアルは、シングルスレッドで単純なエコーサーバーを作成する方法のみを示しました。

前もって感謝します。

4

1 に答える 1

1

UDPでepollを使用するのに問題はありません。epollは、ファイル記述子に読み取るデータがあるかどうかを通知するだけです。(epollのマニュアルページからの)UDPソケットの動作に関連する読み取り/書き込み...操作にはいくつかの影響があります。

       For stream-oriented files (e.g., pipe, FIFO, stream socket), the condition
       that the read/write I/O space is exhausted can also be detected by
       checking the amount of data read from / written to the target file
       descriptor.  For example, if you call read(2) by asking to read a certain
       amount of data and read(2) returns a lower number of bytes, you can be
       sure of having exhausted the read I/O space for the file descriptor.  The
       same is true when writing using write(2).  (Avoid this latter technique if
       you cannot guarantee that the monitored file descriptor always refers to a
       stream-oriented file.)

一方、epollを直接使用することはあまり一般的ではありません。epollを使用する最良の方法は、たとえば、イベントループライブラリ、libev、またはlibeventを使用することです。これはより良いアプローチです。なぜなら、epollはすべてのシステムで利用できるわけではなく、この種のライブラリを使用すると、プログラムの移植性が向上するからです。

ここにUDPでのlibevの使用例があり、ここにlibeventでの他の例があります。

于 2011-06-16T09:00:41.883 に答える