tcp.go 638 B

1234567891011121314151617181920212223242526272829303132
  1. // Copyright (c) Tailscale Inc & AUTHORS
  2. // SPDX-License-Identifier: BSD-3-Clause
  3. package prober
  4. import (
  5. "context"
  6. "fmt"
  7. "net"
  8. )
  9. // TCP returns a Probe that healthchecks a TCP endpoint.
  10. //
  11. // The ProbeFunc reports whether it can successfully connect to addr.
  12. func TCP(addr string) ProbeClass {
  13. return ProbeClass{
  14. Probe: func(ctx context.Context) error {
  15. return probeTCP(ctx, addr)
  16. },
  17. Class: "tcp",
  18. }
  19. }
  20. func probeTCP(ctx context.Context, addr string) error {
  21. var d net.Dialer
  22. conn, err := d.DialContext(ctx, "tcp", addr)
  23. if err != nil {
  24. return fmt.Errorf("dialing %q: %v", addr, err)
  25. }
  26. conn.Close()
  27. return nil
  28. }