1package main 2 3import ( 4 "net" 5 "os" 6 7 "gitlab.com/gitlab-org/labkit/errortracking" 8) 9 10// Be careful: if you let either of the return values get garbage 11// collected by Go they will be closed automatically. 12func createSocket(addr string) (net.Listener, *os.File) { 13 l, err := net.Listen("tcp", addr) 14 if err != nil { 15 fatal(err, "could not create socket") 16 } 17 18 return l, fileForListener(l) 19} 20 21func fileForListener(l net.Listener) *os.File { 22 type filer interface { 23 File() (*os.File, error) 24 } 25 26 f, err := l.(filer).File() 27 if err != nil { 28 fatal(err, "could not find file for listener") 29 } 30 31 return f 32} 33 34func capturingFatal(err error, fields ...errortracking.CaptureOption) { 35 fields = append(fields, errortracking.WithStackTrace()) 36 errortracking.Capture(err, fields...) 37 fatal(err, "capturing fatal") 38} 39