sysGetsock_nowindows.go 816 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. // +build !windows
  2. package mux
  3. import (
  4. "errors"
  5. "github.com/xtaci/kcp-go"
  6. "net"
  7. "os"
  8. "syscall"
  9. )
  10. func sysGetSock(fd *os.File) (bufferSize int, err error) {
  11. if fd != nil {
  12. return syscall.GetsockoptInt(int(fd.Fd()), syscall.SOL_SOCKET, syscall.SO_RCVBUF)
  13. } else {
  14. return 5 * 1024 * 1024, nil
  15. }
  16. }
  17. func getConnFd(c net.Conn) (fd *os.File, err error) {
  18. switch c.(type) {
  19. case *net.TCPConn:
  20. fd, err = c.(*net.TCPConn).File()
  21. if err != nil {
  22. return
  23. }
  24. return
  25. case *net.UDPConn:
  26. fd, err = c.(*net.UDPConn).File()
  27. if err != nil {
  28. return
  29. }
  30. return
  31. case *kcp.UDPSession:
  32. //fd, err = (*net.UDPConn)(unsafe.Pointer(c.(*kcp.UDPSession))).File()
  33. //if err != nil {
  34. // return
  35. //}
  36. // Todo
  37. return
  38. default:
  39. err = errors.New("mux:unknown conn type, only tcp or kcp")
  40. return
  41. }
  42. }