diff options
author | Přemysl Janouch <p@janouch.name> | 2018-08-03 10:55:22 +0200 |
---|---|---|
committer | Přemysl Janouch <p@janouch.name> | 2018-08-03 10:55:22 +0200 |
commit | ab66a607039d24a3aa5033530af137c16934e5de (patch) | |
tree | 400231e64961a352c87f98003ccf8454c850db1a | |
parent | 9ee07873ea043ff52e977060751e4801eb047ee2 (diff) | |
download | xK-ab66a607039d24a3aa5033530af137c16934e5de.tar.gz xK-ab66a607039d24a3aa5033530af137c16934e5de.tar.xz xK-ab66a607039d24a3aa5033530af137c16934e5de.zip |
hid: fix listener shutdown
-rw-r--r-- | xS/main.go | 9 |
1 files changed, 8 insertions, 1 deletions
@@ -931,7 +931,7 @@ func (c *client) unregister(reason string) { ircNotifyRoommates(c, fmt.Sprintf(":%s!%s@%s QUIT :%s", c.nickname, c.username, c.hostname, reason)) - // The eventual QUIT message will take care of state at clients. + // The QUIT message will take care of state on clients. for _, ch := range channels { delete(ch.userModes, c) ircChannelDestroyIfEmpty(ch) @@ -2949,6 +2949,13 @@ func accept(ln net.Listener) { for { // Error handling here may be tricky, see go #6163, #24808. if conn, err := ln.Accept(); err != nil { + // See go #4373, they're being dicks. Another solution would be to + // pass a done channel to this function and close it before closing + // all the listeners, returning from here if it's readable. + if strings.Contains(err.Error(), + "use of closed network connection") { + return + } if op, ok := err.(net.Error); !ok || !op.Temporary() { log.Fatalln(err) } else { |