udp.go 942 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package statsd
  2. import (
  3. "errors"
  4. "net"
  5. "time"
  6. )
  7. // udpWriter is an internal class wrapping around management of UDP connection
  8. type udpWriter struct {
  9. conn net.Conn
  10. }
  11. // New returns a pointer to a new udpWriter given an addr in the format "hostname:port".
  12. func newUDPWriter(addr string) (*udpWriter, error) {
  13. udpAddr, err := net.ResolveUDPAddr("udp", addr)
  14. if err != nil {
  15. return nil, err
  16. }
  17. conn, err := net.DialUDP("udp", nil, udpAddr)
  18. if err != nil {
  19. return nil, err
  20. }
  21. writer := &udpWriter{conn: conn}
  22. return writer, nil
  23. }
  24. // SetWriteTimeout is not needed for UDP, returns error
  25. func (w *udpWriter) SetWriteTimeout(d time.Duration) error {
  26. return errors.New("SetWriteTimeout: not supported for UDP connections")
  27. }
  28. // Write data to the UDP connection with no error handling
  29. func (w *udpWriter) Write(data []byte) (int, error) {
  30. return w.conn.Write(data)
  31. }
  32. func (w *udpWriter) Close() error {
  33. return w.conn.Close()
  34. }