dialer.go 683 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package dialer
  2. import (
  3. "errors"
  4. "net"
  5. "time"
  6. v2net "github.com/v2ray/v2ray-core/common/net"
  7. )
  8. var (
  9. ErrorInvalidHost = errors.New("Invalid Host.")
  10. )
  11. func Dial(dest v2net.Destination) (net.Conn, error) {
  12. if dest.Address().IsDomain() {
  13. dialer := &net.Dialer{
  14. Timeout: time.Second * 60,
  15. DualStack: true,
  16. }
  17. network := "tcp"
  18. if dest.IsUDP() {
  19. network = "udp"
  20. }
  21. return dialer.Dial(network, dest.NetAddr())
  22. }
  23. ip := dest.Address().IP()
  24. if dest.IsTCP() {
  25. return net.DialTCP("tcp", nil, &net.TCPAddr{
  26. IP: ip,
  27. Port: int(dest.Port()),
  28. })
  29. } else {
  30. return net.DialUDP("udp", nil, &net.UDPAddr{
  31. IP: ip,
  32. Port: int(dest.Port()),
  33. })
  34. }
  35. }