Unixドメインソケットメモ

Posted on

デバッグ方法

普通にcurl経由でリクエストを投げれる。

curl --unix-socket /path/to/socket http:/user/get/1

プロセスを調べる

ソケットファイルに対して lsof して調べることが出来る。procfsがあれば /proc/PID/ を見ても良い。

lsof /path/to/socket

エラーハンドリング

既にcloseしている(readする人がいない)ソケットに対してwriteすると EPIPE システムコールが返る. なおここでプロセスが標準出力, 標準エラーに書いていると SIGPIPE で殺される.

返されるエラー例:

"write unix /var/run/go.sock->@: write: broken pipe"

goでunixドメインソケットに対してwriteした時のエラーハンドリングは以下のような感じになる:

if ne, nk := err.(*net.OpError); nk {
    if oe, ok := ne.Err.(*os.SyscallError); ok && oe.Err == syscall.EPIPE {
        // error handling
    }
}