3

nfqeueueからパケットを取得し、ソケットをethカードに開いてパケットを送信することで、ブリッジを実装します(途中にロジックがあります)。

私はcppと低レベルに慣れていないので、愚かな質問をするかもしれません。

私が正しいことを理解しているなら、私はすべてのパケットのソケットを開閉するべきではありません。この例に基づいてコードを記述します-http://austinmarton.wordpress.com/2011/09/14/sending-raw-ethernet-packets-from-a-specific-interface-in-c-on-linux/

私はこのようにソケットを開きます:

sockfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW))

私の質問は次のとおりです。1。ソケットはどのくらいの期間生きていますか? 2.ソケットがまだ開いているかどうかを確認するにはどうすればよいですか?3.どうすれば閉じられますか?シャットダウンを見ましたが、これがAPIかどうかわかりませんでしたか?4.誰かが私を本番レベルの例に導くことができますか。ソケット例外を処理することを意味します..。

ありがとうございました

4

1 に答える 1

2

送信または受信するフレームがある限り、そのソケットを開いたままにします。通常の方法でソケットを閉じますclose(2)。これがあなたのための別のrawソケットチュートリアルです-http ://www.tenouk.com/Module43a.html

shutdown(2)TCPでのみ意味があり、ここではまったく関係ありません。

編集0:

接続はありません。ここでイーサネットについて話しています。

どうぞよろしくお願いします。この本を読んでください-TCP/IP Illustrated、Volume 1:TheProtocols。W.リチャードスティーブンスによって-あなたに混乱のトンを救うでしょう。

于 2012-07-18T18:16:15.737 に答える