4

socket()connect()、などのソケット層呼び出しを傍受するユーザー空間にライブラリがありますaccept()。私は TCP ソケットのみを扱っています。

Down in Kernel Space すべての TCP 接続を処理するネットワーク カーネル モジュールがあります。ユーザー スペース ライブラリによってインターセプトされたソケットをドライバーで識別できるようにする必要があります。

これまでのところ、ユーザー空間で設定できる (カーネル)のpriorityフィールドを使用してきました。しかし、それはかなり汚いハックです。struct socksetsockopt()

struct sockユーザースペースから安全に使用および設定できるプライベートフィールドはありsetsockopt()ますか?

ありがとう。

4

2 に答える 2

6

ユーザー空間とカーネルコードだけが使用できる「プライベートフィールド」オプションは実際にはありません。

このSO_PRIORITYオプションの使用は、スタックがパケットを処理する方法を変更する可能性があり、理解しにくい結果につながる可能性があるため、少し煩わしいように思えます。より安全なオプションは、SO_RCVBUFまたはSO_SNDBUF値を通常の既定値からわずかな差分だけ調整することです。Linux は渡された値を 2 倍にしますが、デフォルト値からデルタを探し、これが「傍受された」ソケットであることを示すシグナルとしてデルタの存在を知ることができます。

于 2013-09-16T20:00:15.063 に答える