Skip to content

Instantly share code, notes, and snippets.

@buroz
Created June 2, 2020 21:03
Show Gist options
  • Save buroz/7f0b83179346709889e3b8786394cc3d to your computer and use it in GitHub Desktop.
Save buroz/7f0b83179346709889e3b8786394cc3d to your computer and use it in GitHub Desktop.
UDP Server with Golang
package udp_server
import (
"errors"
"log"
"net"
)
type UDPServer struct {
Addr string
server *net.UDPConn
}
type Packet struct {
Port int
Body []byte
}
func (u *UDPServer) Run() (err error) {
srcAddr, err := net.ResolveUDPAddr("udp", u.Addr)
if err != nil {
return errors.New("could not resolve UDP addr")
}
u.server, err = net.ListenUDP("udp", srcAddr)
if err != nil {
return errors.New("could not listen on UDP")
}
return u.handleConnections()
}
func (u *UDPServer) handleConnections() error {
var err error
for {
buf := make([]byte, 1024)
n, conn, err := u.server.ReadFromUDP(buf)
if err != nil {
log.Println(err)
break
}
if conn == nil {
continue
}
go u.handleConnection(conn, buf[:n])
}
return err
}
func (u *UDPServer) handleConnection(addr *net.UDPAddr, cmd []byte) *Packet {
packet := &Packet{}
packet.Port = addr.Port
packet.Body = cmd
return packet
}
func (u *UDPServer) Close() error {
err := u.Close()
if err != nil {
return err
}
return nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment