以下の内容はhttps://syossan.hateblo.jp/entry/2018/02/13/135130より取得しました。


【Go】Unixドメインソケットでのinterruptを使った終了処理

GoでUnixドメインソケットを組んでいる時に、掲題が疑問だったので調べてみました。

Why?

最初このようなListenerのコードを書いていました。

単純に net.Listen/tmp/connection.sock をlistenして、 listener.Accept でコネクションを待ち受けているという非常に簡単なコードです。

で、このプログラムを普通に動かしてSIGINT Signal で割り込みすると、本来削除されるべきsocketファイルが存在したままとなり、再度プログラムを動かすとエラーとなります。

これをどうにかしたかったのですが、 listener.Accept で待ち受けている状態で、どうやったら signal.Notify で受け取ったシグナルを元にプログラムを終了させるのか、パッと考えつきませんでした。

How

インターネットをふらついていると、以下のようなコード片を発見しました。

golang unix domain socket · GitHub

このコード片の server.go にお目当てのコードがありました。

どういうことかというと、メインのスレッドは listener.Accept で待ち受けておいて、goroutineで作った新しいスレッドでSIGINT Signalをキャッチして、プログラムを終了させるという流れです。

goroutineのスレッド側でSignalをキャッチする、というのがちょっと思いつきませんでした。




以上の内容はhttps://syossan.hateblo.jp/entry/2018/02/13/135130より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14