![Linux カーネルはパケットを保持していますか?](https://rvso.com/image/168796/Linux%20%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%AF%E3%83%91%E3%82%B1%E3%83%83%E3%83%88%E3%82%92%E4%BF%9D%E6%8C%81%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
私は DNS 解決用のサードパーティ プログラム (組み込みソリューション上) を調べてきましたが、DNS クエリをアップストリーム サーバーに送信するコードでは、connect() してから send() を実行します。
send() は、与えられたバイト数を返します (つまり、-1 または errno が設定されていません) が、Wireshark で DNS クエリが表示されません。そのため、DNS プログラムはパケットが送信されたと認識しますが、その応答を受信せず、そのパケットをタイムアウトします。ただし、後続の DNS クエリは問題なく通過します。
カーネルはパケットを保持していますか? 保持している場合、なぜこれを実行しているのかをどうやって確認できますか? このパケットの送信をブロックするルールはありません。
カーネルは、リモートの宛先へのルートが到達不可能であると判断するとパケットを保持できると聞きましたが、これは実際に起こっているのでしょうか。もし起こっているのであれば、その詳細を知るにはどうすればよいのでしょうか。