diff --git a/robustirc-bridge/bridge.go b/robustirc-bridge/bridge.go
index de6681f..a9e20cc 100644
--- a/robustirc-bridge/bridge.go
+++ b/robustirc-bridge/bridge.go
@@ -9,6 +9,7 @@ package main
 
 import (
 	"bufio"
+	"context"
 	"crypto/tls"
 	"flag"
 	"fmt"
@@ -298,7 +299,7 @@ func (s *ircsession) getMessages() {
 	}
 }
 
-func (p *bridge) handleIRC(conn net.Conn) {
+func (p *bridge) handleIRC(ctx context.Context, conn net.Conn) {
 	var quitmsg, killmsg string
 	var waitingForPingReply bool
 
@@ -527,6 +528,7 @@ func main() {
 		log.Fatal("You must specify either -network and -listen, or -socks.")
 	}
 
+	ctx := context.Background()
 	if *httpAddress != "" {
 		http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
 			for _, n := range robustsession.CopyNetworks() {
@@ -570,7 +572,7 @@ func main() {
 		listeners = append(listeners, ln)
 		go func() {
 			log.Printf("RobustIRC IRC bridge listening on %q (SOCKS). Specify an empty -socks= to disable.\n", *socks)
-			if err := serveSocks(ln, &connWG); err != nil {
+			if err := serveSocks(ctx, ln, &connWG); err != nil {
 				log.Fatal(err)
 			}
 		}()
@@ -582,7 +584,7 @@ func main() {
 		log.Printf("Not listening on %q (IRC) because -network= was not specified.\n", *listen)
 		ln := maybeTLSListener(*socks)
 		listeners = append(listeners, ln)
-		log.Fatal(serveSocks(ln, &connWG))
+		log.Fatal(serveSocks(ctx, ln, &connWG))
 	}
 
 	// IRC
@@ -607,13 +609,13 @@ func main() {
 					connWG.Add(1)
 					go func() {
 						defer connWG.Done()
-						p.handleIRC(conn)
+						p.handleIRC(ctx, conn)
 					}()
 				}
 			}()
 		}
 	} else if n := nfds(); *network != "" && n > 0 {
-		if err := handleSocketActivation(n, &connWG); err != nil {
+		if err := handleSocketActivation(ctx, n, &connWG); err != nil {
 			log.Fatal(err)
 		}
 	}
diff --git a/robustirc-bridge/socket_activation.go b/robustirc-bridge/socket_activation.go
index 37a31a3..557ebe4 100644
--- a/robustirc-bridge/socket_activation.go
+++ b/robustirc-bridge/socket_activation.go
@@ -4,6 +4,7 @@
 package main
 
 import (
+	"context"
 	"log"
 	"net"
 	"os"
@@ -32,7 +33,7 @@ func nfds() int {
 // handleSocketActivation handles listening on the systemd-provided sockets.
 // It can return an error to differentiate between this implementation and
 // the no-op on Windows.
-func handleSocketActivation(n int, connWG *sync.WaitGroup) error {
+func handleSocketActivation(ctx context.Context, n int, connWG *sync.WaitGroup) error {
 	names := strings.Split(os.Getenv("LISTEN_FDNAMES"), ":")
 	os.Unsetenv("LISTEN_PID")
 	os.Unsetenv("LISTEN_FDS")
@@ -67,7 +68,7 @@ func handleSocketActivation(n int, connWG *sync.WaitGroup) error {
 				connWG.Add(1)
 				go func() {
 					defer connWG.Done()
-					p.handleIRC(conn)
+					p.handleIRC(ctx, conn)
 				}()
 			}
 		}()
diff --git a/robustirc-bridge/socks.go b/robustirc-bridge/socks.go
index c349475..c18cad6 100644
--- a/robustirc-bridge/socks.go
+++ b/robustirc-bridge/socks.go
@@ -1,6 +1,7 @@
 package main
 
 import (
+	"context"
 	"encoding/binary"
 	"errors"
 	"fmt"
@@ -55,7 +56,7 @@ type socksConnectionData struct {
 	Port     uint16
 }
 
-func serveSocks(ln net.Listener, connWG *sync.WaitGroup) error {
+func serveSocks(ctx context.Context, ln net.Listener, connWG *sync.WaitGroup) error {
 	for {
 		conn, err := ln.Accept()
 		if err != nil {
@@ -69,7 +70,7 @@ func serveSocks(ln net.Listener, connWG *sync.WaitGroup) error {
 			defer connWG.Done()
 			s := &socksServer{conn}
 
-			if err := s.handleConn(); err != nil {
+			if err := s.handleConn(ctx); err != nil {
 				log.Printf("Could not SOCKS: %v\n", err)
 			}
 		}()
@@ -79,7 +80,7 @@ func serveSocks(ln net.Listener, connWG *sync.WaitGroup) error {
 	return nil
 }
 
-func (s *socksServer) handleConn() (err error) {
+func (s *socksServer) handleConn(ctx context.Context) (err error) {
 	defer s.conn.Close()
 
 	if err = s.greet(); err != nil {
@@ -122,7 +123,7 @@ func (s *socksServer) handleConn() (err error) {
 		return err
 	}
 
-	p.handleIRC(s.conn)
+	p.handleIRC(ctx, s.conn)
 	// never returns
 	return nil
 }