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
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

sockopts.go 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  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)) //nolint: forcetypeassert
  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)) //nolint: forcetypeassert
  17. }
  18. func setCommonSocketOptions(conn *net.TCPConn) error {
  19. if err := conn.SetKeepAlivePeriod(DefaultTCPKeepAlivePeriod); err != nil {
  20. return fmt.Errorf("cannot set time period of TCP keepalive probes: %w", err)
  21. }
  22. if err := conn.SetLinger(tcpLingerTimeout); err != nil {
  23. return fmt.Errorf("cannot set TCP linger timeout: %w", err)
  24. }
  25. rawConn, err := conn.SyscallConn()
  26. if err != nil {
  27. return fmt.Errorf("cannot get underlying raw connection: %w", err)
  28. }
  29. if err := setSocketReuseAddrPort(rawConn); err != nil {
  30. return fmt.Errorf("cannot setup SO_REUSEADDR/PORT: %w", err)
  31. }
  32. return nil
  33. }