Tomo-9925 / cnet

Controlling and logging communication of process in Docker container
2 stars 0 forks source link

[WIP]SIGINTを受け取ったときにpackets channelを閉じるように #29

Closed masibw closed 3 years ago

masibw commented 3 years ago

16 の修正です.

再現方法

継続的にdrop対象のパケットが送られてきている状態でSIGINTを送ると処理がストップします.

例) curl サーバーIP {cnetで拒否設定のポート} をしている状態でctrl+cにより終了しようとしてもsignalを受け取った後進まなくなる

原因

nfqueueが使用しているchanを閉じていなかった.

対処法

queue.GetPackets()で得られるチャンネルは受信専用であり,closeすることができない(送信側からcloseする必要がある) ライブラリには後片付け用のClose()があるがチャンネルのcloseを行っていない(おそらくバグ) そのため上記ライブラリをForkして書き換えたものを使用するように変更しました

一応PRを送りますが、長らくメンテナンスされていないライブラリなのでどうなるかわかりません

治ったと思ったら治らなくてぴえんです

masibw commented 3 years ago

これもこれで問題でしたが解決しなかったのと(おそらく)本当の解決策と共存し得ないのでcloseします