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