デバッグ方法
普通に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
}
}