breaktcp_linux.go 554 B

123456789101112131415161718192021222324252627282930
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package ipnlocal
  4. import (
  5. "log"
  6. "golang.org/x/sys/unix"
  7. )
  8. func init() {
  9. breakTCPConns = breakTCPConnsLinux
  10. }
  11. func breakTCPConnsLinux() error {
  12. var matched int
  13. for fd := 0; fd < 1000; fd++ {
  14. _, err := unix.GetsockoptTCPInfo(fd, unix.IPPROTO_TCP, unix.TCP_INFO)
  15. if err == nil {
  16. matched++
  17. err = unix.Close(fd)
  18. log.Printf("debug: closed TCP fd %v: %v", fd, err)
  19. }
  20. }
  21. if matched == 0 {
  22. log.Printf("debug: no TCP connections found")
  23. }
  24. return nil
  25. }