Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

sockopts.go 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package network
  2. import (
  3. "fmt"
  4. "net"
  5. )
  6. // SetClientSocketOptions tunes a TCP socket that represents a connection to
  7. // end user (not Telegram service or fronting domain).
  8. //
  9. // bufferSize setting is deprecated and ignored.
  10. func SetClientSocketOptions(conn net.Conn, bufferSize int) error {
  11. return setCommonSocketOptions(conn.(*net.TCPConn))
  12. }
  13. // SetServerSocketOptions tunes a TCP socket that represents a connection to
  14. // remote server like Telegram or fronting domain (but not end user).
  15. func SetServerSocketOptions(conn net.Conn, bufferSize int) error {
  16. return setCommonSocketOptions(conn.(*net.TCPConn))
  17. }
  18. func setCommonSocketOptions(conn *net.TCPConn) error {
  19. if err := conn.SetKeepAlive(true); err != nil {
  20. return fmt.Errorf("cannot disable TCP keepalive probes: %w", err)
  21. }
  22. if err := conn.SetKeepAlivePeriod(DefaultTCPKeepAlivePeriod); err != nil {
  23. return fmt.Errorf("cannot set time period of TCP keepalive probes: %w", err)
  24. }
  25. if err := conn.SetLinger(tcpLingerTimeout); err != nil {
  26. return fmt.Errorf("cannot set TCP linger timeout: %w", err)
  27. }
  28. rawConn, err := conn.SyscallConn()
  29. if err != nil {
  30. return fmt.Errorf("cannot get underlying raw connection: %w", err)
  31. }
  32. if err := setSocketReuseAddrPort(rawConn); err != nil {
  33. return fmt.Errorf("cannot setup SO_REUSEADDR/PORT: %w", err)
  34. }
  35. return nil
  36. }