dialer.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package tcp
  2. import (
  3. "net"
  4. "v2ray.com/core/common/log"
  5. v2net "v2ray.com/core/common/net"
  6. "v2ray.com/core/transport/internet"
  7. )
  8. var (
  9. globalCache = NewConnectionCache()
  10. )
  11. func Dial(src v2net.Address, dest v2net.Destination) (internet.Connection, error) {
  12. log.Info("Dailing TCP to ", dest)
  13. if src == nil {
  14. src = v2net.AnyIP
  15. }
  16. id := src.String() + "-" + dest.NetAddr()
  17. var conn net.Conn
  18. if dest.Network() == v2net.Network_TCP && effectiveConfig.ConnectionReuse {
  19. conn = globalCache.Get(id)
  20. }
  21. if conn == nil {
  22. var err error
  23. conn, err = internet.DialToDest(src, dest)
  24. if err != nil {
  25. return nil, err
  26. }
  27. }
  28. return NewConnection(id, conn, globalCache), nil
  29. }
  30. func DialRaw(src v2net.Address, dest v2net.Destination) (internet.Connection, error) {
  31. log.Info("Dailing Raw TCP to ", dest)
  32. conn, err := internet.DialToDest(src, dest)
  33. if err != nil {
  34. return nil, err
  35. }
  36. return &RawConnection{
  37. TCPConn: *conn.(*net.TCPConn),
  38. }, nil
  39. }
  40. func init() {
  41. internet.TCPDialer = Dial
  42. internet.RawTCPDialer = DialRaw
  43. }