1

fdrawソケット( 、select、...)を操作するためのCラッパーまたはライブラリはありますか?ロケット科学はなく、読みやすく、素敵なラッパーFD_SETなどです。

boost ::asioはC++用なので、ここでは役に立ちません。

Beejのネットワークプログラミングガイドとソケットの操作方法を知っています。自分でラップを開始する前にラッパーを探します。

関連している

4

3 に答える 3

1

Linuxでは、標準のGNUlibcライブラリでラップされた適切なシステムコールを使用するだけですsocket(2)を使用してrawソケットのfdを取得してから、recv(2)poll(2)などの他のシステムコールを使用します。

rawソケットを使用するには、おそらくroot権限が必要です。

廃止されつつある(2)を選択することをお勧めpoll(2)します。(C10K問題の詳細をお読みください)。

socket(7)およびpacket(7)のマニュアルページも参照してください。

于 2012-10-18T13:02:32.863 に答える
1

libdnetを見てください。詳細: http: //libdnet.sourceforge.net/

于 2012-10-18T13:08:23.157 に答える
1

Dan Kegel (c10k 担当者) による rn を参照してください: http://www.kegel.com/rn/。poll/epoll/sigio などの複数の select に似た syscall の周りに、plain-old-c インターフェイスがあります。高い fd カウントではパフォーマンスに大きな違いがあり、最適なインターフェイス (epoll/kqueue) は移植性がありません。

rn api は epoll 風です。select のようにリスト全体を渡すのではなく、個々の fd を追加/削除するだけです。FD_SET を使用した古き良き select は、コンパイル時にソケットの数に制限され、すべての呼び出しでユーザーからカーネル空間へのリスト全体をコピーします。epoll を使用すると、100K のアイドル ソケットを待機している場合でも高速な個々の FD を追加/削除するための個別の syscall があります。

最新の Linux システムはすべて epoll をサポートする必要があります。移植性を気にしない場合は、直接使用できます。

于 2012-10-19T10:33:07.710 に答える