|
@@ -5,6 +5,7 @@ package irc
|
5
|
5
|
|
6
|
6
|
import (
|
7
|
7
|
"errors"
|
|
8
|
+ "io/fs"
|
8
|
9
|
"net"
|
9
|
10
|
"net/http"
|
10
|
11
|
"os"
|
|
@@ -29,7 +30,7 @@ type IRCListener interface {
|
29
|
30
|
|
30
|
31
|
// NewListener creates a new listener according to the specifications in the config file
|
31
|
32
|
func NewListener(server *Server, addr string, config utils.ListenerConfig, bindMode os.FileMode) (result IRCListener, err error) {
|
32
|
|
- baseListener, err := createBaseListener(addr, bindMode)
|
|
33
|
+ baseListener, err := createBaseListener(server, addr, bindMode)
|
33
|
34
|
if err != nil {
|
34
|
35
|
return
|
35
|
36
|
}
|
|
@@ -43,11 +44,14 @@ func NewListener(server *Server, addr string, config utils.ListenerConfig, bindM
|
43
|
44
|
}
|
44
|
45
|
}
|
45
|
46
|
|
46
|
|
-func createBaseListener(addr string, bindMode os.FileMode) (listener net.Listener, err error) {
|
|
47
|
+func createBaseListener(server *Server, addr string, bindMode os.FileMode) (listener net.Listener, err error) {
|
47
|
48
|
addr = strings.TrimPrefix(addr, "unix:")
|
48
|
49
|
if strings.HasPrefix(addr, "/") {
|
49
|
50
|
// https://stackoverflow.com/a/34881585
|
50
|
|
- os.Remove(addr)
|
|
51
|
+ removeErr := os.Remove(addr)
|
|
52
|
+ if removeErr != nil && !errors.Is(removeErr, fs.ErrNotExist) {
|
|
53
|
+ server.logger.Warning("listeners", "could not delete unix domain listener", addr, removeErr.Error())
|
|
54
|
+ }
|
51
|
55
|
listener, err = net.Listen("unix", addr)
|
52
|
56
|
if err == nil && bindMode != 0 {
|
53
|
57
|
os.Chmod(addr, bindMode)
|