{"id":14865,"date":"2017-12-05T09:00:55","date_gmt":"2017-12-05T00:00:55","guid":{"rendered":"http:\/\/www.techscore.com\/blog\/?p=14865"},"modified":"2018-11-14T16:33:42","modified_gmt":"2018-11-14T07:33:42","slug":"go_broken-pipe","status":"publish","type":"post","link":"https:\/\/www.techscore.com\/blog\/2017\/12\/05\/go_broken-pipe\/","title":{"rendered":"Go\u306e\u300cbroken pipe\u300d\u3092\u8ffd\u3044\u304b\u3051\u308b\uff08*net.OpError\u7248\uff09"},"content":{"rendered":"
\u3053\u308c\u306f TECHSCORE Advent Calendar 2017<\/a>\u306e\uff15\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002<\/p>\n \u4eca\u56de\u306fGo\u3067\u300cbroken pipe\u300d\u306e\u30a8\u30e9\u30fc\u3092\u5224\u5b9a\u3057\u3066\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3001\u3068\u3044\u3046\u8a71\u3067\u3059\u3002<\/p>\n \u300cgolang broken pipe\u300d\u3067\u691c\u7d22\u3059\u308b\u3068\u3068\u3066\u3082\u7d20\u6575\u306a\u8a18\u4e8b\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002\u3068\u3066\u3082\u53c2\u8003\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n Go \u3067 \"broken pipe\" \u3092\u7121\u8996\u3057\u305f\u3044\u50d5\u9054\u304c\u30cf\u30de\u308b\u7f60<\/a><\/p><\/blockquote>\n \u3068\u3042\u308bGo\u3067\u4f5c\u3063\u305fWeb\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u304c\u51fa\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n \u30a8\u30e9\u30fc\u306f\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u8fd4\u3059\u3068\u3053\u308d\u3067\u8d77\u304d\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002<\/p>\n \u300cbroken pipe\u300d\u3067Go\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u3092\u8abf\u3079\u308b\u3068\u3001EPIPE\u306e\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3067\u3042\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3057\u305f\u3002 syscall\/zerrors_darwin_amd64.go#L1314<\/a><\/p>\n syscall\/zerrors_darwin_amd64.go#L1217<\/a><\/p>\n \u30a8\u30e9\u30fc\u3092\u518d\u73fe\u3059\u308b\u305f\u3081\u306b\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3068\u30b5\u30fc\u30d0\u30fc\u3092\u7528\u610f\u3057\u307e\u3059\u3002 \u7528\u610f\u3057\u305f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u30b5\u30fc\u30d0\u30fc\u306b\u5411\u3051\u3066\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u6295\u3052\u308b\u3068\u3001\u300cbroken pipe\u300d\u30a8\u30e9\u30fc\u304c\u3067\u307e\u3059\u3002<\/p>\n Go\u3067\u306ferror\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3068\u3044\u3046\u306e\u304c\u3042\u308a\u3001\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3059\u308b\u3060\u3051\u3067\u3042\u308c\u3070error\u306e\u578b\u3092\u6c17\u306b\u305b\u305a\u306b\u51e6\u7406\u3092\u66f8\u3051\u308b\u3088\u3046\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n \u3057\u304b\u3057\u3001\u4eca\u56de\u306e\u3088\u3046\u306b\u7279\u5b9a\u306e\u30a8\u30e9\u30fc\u306e\u307f\u5225\u306e\u51e6\u7406\u3092\u5f53\u3066\u305f\u3044\u5834\u5408\u306b\u306f\u3001error\u3092\u578b\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u3057\u3066\u30c1\u30a7\u30c3\u30af\u3057\u307e\u3059\u3002\u53c2\u8003: Error handling and Go - The Go Blog<\/a><\/p>\n \u3068\u3044\u3046\u3053\u3068\u3067\u3001error\u306e\u578b\u3092\u8abf\u3079\u3066\u307f\u307e\u3059\u3002\u3064\u3044\u3067\u306b\u69cb\u9020\u3082\u8abf\u3079\u307e\u3059\u3002<\/p>\n \u7d50\u679c\u306f\u4ee5\u4e0b\u306e\u901a\u308a\u3067\u3059\u3002<\/p>\n \u3053\u308c\u3067*net.OpError<\/a>\u3068\u3044\u3046\u306e\u304c\u308f\u304b\u308a\u307e\u3057\u305f\u3002<\/p>\n \u3053\u3053\u3067\u3055\u3089\u306b\u3001*os.SyscallError<\/a>\u304c\u3067\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n \u3068\u3044\u3046\u308f\u3051\u3067\u3001\uff12\u6bb5\u968e\u3067\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u3057\u3066\u3001syscall.EPIPE\u304b\u5224\u5b9a\u3092\u3057\u305f\u30b3\u30fc\u30c9\u304c\u4ee5\u4e0b\u3067\u3059\u3002 \u66f8\u304d\u8fbc\u307f\u304c\u59cb\u307e\u3063\u3066\u3044\u308b\u30bf\u30a4\u30df\u30f3\u30b0\u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u30b3\u30cd\u30af\u30b7\u30e7\u30f3\u3092\u5207\u308b\u3068\u8d77\u3053\u3063\u3066\u3057\u307e\u3046\u3093\u3067\u3059\u304c\u3001 \u6700\u8fd1 Go\u306a\u3089\u308f\u304b\u308b\u30b7\u30b9\u30c6\u30e0\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0<\/a>\u3092\u8aad\u307f\u59cb\u3081\u305f\u306e\u3067\u3059\u304c\u3001\u3068\u3066\u3082\u52c9\u5f37\u306b\u306a\u308b\u306e\u3067\u8208\u5473\u304c\u3042\u308b\u65b9\u306f\u305c\u3072\u8aad\u3093\u3067\u307f\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":" \u3053\u308c\u306f TECHSCORE Advent Calendar 2017\u306e\uff15\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002<\/p>\n \u306f\u3058\u3081\u306b<\/p>\n \u4eca\u56de\u306fGo\u3067\u300cbroken pipe\u300d\u306e\u30a8\u30e9\u30fc\u3092\u5224\u5b9a\u3057\u3066\u51e6\u7406\u3059\u308b\u3088\u3046\u306b\u3057\u305f\u3001\u3068\u3044\u3046\u8a71\u3067\u3059\u3002\u306f\u3058\u3081\u306b<\/h2>\n
\u80cc\u666f<\/h2>\n
write tcp [::1]:3000->[::1]:65341: write: broken pipe<\/pre>\n
\n\u79c1\u306e\u74b0\u5883\uff08Mac OS:darwin, ARCH:amd64)\u306e\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u3067\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\"broken pipe\",<\/pre>\n
EPIPE = Errno(0x20)<\/pre>\n
\u8a66\u3057\u3066\u307f\u308b<\/h2>\n
\n\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u30ea\u30af\u30a8\u30b9\u30c8\u30921\u79d2\u3067\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\r\n\/\/ \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b3\u30fc\u30c9\r\npackage main\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"io\"\r\n\t\"net\/http\"\r\n\t\"os\"\r\n\t\"time\"\r\n)\r\n\r\nfunc main() {\r\n\tclient := &http.Client{Timeout: 1 * time.Second} \/\/ 1\u79d2\u3067\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\r\n\tresp, err := client.Get(\"http:\/\/localhost:3000\")\r\n\tif err != nil {\r\n\t\tfmt.Println(err)\r\n\t\treturn\r\n\t}\r\n\tdefer resp.Body.Close()\r\n\r\n\t_, err = io.Copy(os.Stdout, resp.Body)\r\n\tif err != nil {\r\n\t\tfmt.Println(err)\r\n\t\treturn\r\n\t}\r\n}\r\n<\/pre>\n
\r\n\/\/ \u30b5\u30fc\u30d0\u30fc\u30b3\u30fc\u30c9\r\npackage main\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"log\"\r\n\t\"net\"\r\n\t\"net\/http\"\r\n\t\"os\"\r\n\t\"syscall\"\r\n)\r\n\r\nfunc main() {\r\n\tlog.Fatal(http.ListenAndServe(\":3000\", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\r\n\t\tsize := 100 * 1000 * 1000\r\n\t\t_, err := w.Write(make([]byte, size)) \/\/ \u9069\u5f53\u306a\u30b5\u30a4\u30ba\u306e\u30d0\u30a4\u30c8\u66f8\u304d\u8fbc\u307f\uff08\u74b0\u5883\u4f9d\u5b58\u306a\u306e\u3067\u3046\u307e\u304f\u3044\u304b\u306a\u3044\u5834\u5408\u306f\u30b5\u30a4\u30ba\u3092\u5927\u304d\u304f\u5897\u3084\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\uff09\r\n\t\tif err != nil {\r\n\t\t\tfmt.Println(err)\r\n\t\t}\r\n\t})))\r\n}\r\n<\/pre>\n
\r\nhttp.ListenAndServe(\":3000\", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\r\n size := 100 * 1000 * 1000\r\n _, err := w.Write(make([]byte, size))\r\n if err != nil {\r\n fmt.Println(err) \/\/ \u3053\u3053\u306e\u30a8\u30e9\u30fc\u3092\u62fe\u3063\u3066\u3044\u308b\r\n }\r\n}))\r\n<\/pre>\n
\r\ntype error interface {\r\n Error() string \/\/ error\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3092\u6e80\u305f\u3059\u578b\u306fError()\u30e1\u30bd\u30c3\u30c9\u3092\u6301\u3063\u3066\u3044\u308b\u306e\u3067\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u51fa\u305b\u308b\r\n}\r\n<\/pre>\n
\r\nhttp.ListenAndServe(\":3000\", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\r\n size := 100 * 1000 * 1000\r\n _, err := w.Write(make([]byte, size)) \/\/ \u9069\u5f53\u306a\u30b5\u30a4\u30ba\u306e\u30d0\u30a4\u30c8\u66f8\u304d\u8fbc\u307f\r\n if err != nil {\r\n fmt.Println(err)\r\n fmt.Printf(\"%T\\n\", err) \/\/ \u578b\u8abf\u3079\r\n fmt.Printf(\"%#v\\n\", err) \/\/ \u69cb\u9020\u8abf\u3079\r\n return\r\n }\r\n}))\r\n<\/pre>\n
write tcp [::1]:3000->[::1]:56964: write: broken pipe\r\n*net.OpError\r\n&net.OpError{Op:\"write\", Net:\"tcp\", Source:(*net.TCPAddr)(0xc420018e10), Addr:(*net.TCPAddr)(0xc420018e40), Err:(*os.SyscallError)(0xc42000c200)}<\/pre>\n
\r\n\/\/ net\u30d1\u30c3\u30b1\u30fc\u30b8\r\ntype OpError struct\r\n Op string\r\n Net string\r\n Source *net.TCPAddr\r\n Addr *net.TCPAddr\r\n Err *os.SyscallError\r\n}\r\n<\/pre>\n
\r\n\/\/ os\u30d1\u30c3\u30b1\u30fc\u30b8\r\ntype SyscallError struct {\r\n Syscall string\r\n Err error\r\n}\r\n<\/pre>\n
\n\u3053\u308c\u3067\u5f53\u521d\u306e\u76ee\u7684\u3060\u3063\u305f\u300cEPIPE\u306b\u5bfe\u3057\u3066\u5225\u306e\u51e6\u7406\u3092\u5f53\u3066\u308b\u300d\u3053\u3068\u304c\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\u3002<\/p>\n\r\n\tlog.Fatal(http.ListenAndServe(\":3000\", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {\r\n\t\tsize := 1000 * 1000 * 100\r\n\t\t_, err := w.Write(make([]byte, size))\r\n\t\tif err != nil {\r\n\t\t\tfmt.Println(err)\r\n\t\t\tif opErr, ok := err.(*net.OpError); ok {\r\n\t\t\t\tif sysErr, okok := opErr.Err.(*os.SyscallError); okok && sysErr.Err == syscall.EPIPE {\r\n\t\t\t\t\tfmt.Println(\"EPIPE ERROR\") \/\/ EPIPE\r\n\t\t\t\t\treturn\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tfmt.Println(\"NOT EPIPE ERROR\") \/\/ EPIPE\u4ee5\u5916\r\n\t\t}\r\n\t})))\r\n<\/pre>\n
\u307e\u3068\u3081<\/h2>\n
\n\u3082\u3063\u3068\u3046\u307e\u3044\u3084\u308a\u304b\u305f\uff08\u691c\u8a3c\u65b9\u6cd5\u3068\u89e3\u6c7a\u65b9\u6cd5\uff09\u3092\u3054\u5b58\u77e5\u306e\u65b9\u306f\u6559\u3048\u3066\u3044\u305f\u3060\u3051\u308b\u3068\u3046\u308c\u3057\u3044\u3067\u3059\u3002<\/p>\n
\u7d9a\u304d\u3092\u8aad\u3080...<\/a><\/p>\n","protected":false},"author":41,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[276],"tags":[141,156],"_links":{"self":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts\/14865"}],"collection":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/comments?post=14865"}],"version-history":[{"count":17,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts\/14865\/revisions"}],"predecessor-version":[{"id":14902,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/posts\/14865\/revisions\/14902"}],"wp:attachment":[{"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/media?parent=14865"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/categories?post=14865"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.techscore.com\/blog\/wp-json\/wp\/v2\/tags?post=14865"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}