Add support for UDP routing in systemd socket activation
This commit is contained in:
parent
95dd17e020
commit
261e4395f3
9 changed files with 158 additions and 54 deletions
|
@ -34,16 +34,12 @@ type Listener struct {
|
|||
timeout time.Duration
|
||||
}
|
||||
|
||||
// Listen creates a new listener.
|
||||
func Listen(listenConfig net.ListenConfig, network, address string, timeout time.Duration) (*Listener, error) {
|
||||
// Creates a new listener from PacketConn.
|
||||
func ListenPacketConn(packetConn net.PacketConn, timeout time.Duration) (*Listener, error) {
|
||||
if timeout <= 0 {
|
||||
return nil, errors.New("timeout should be greater than zero")
|
||||
}
|
||||
|
||||
packetConn, err := listenConfig.ListenPacket(context.Background(), network, address)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("listen packet: %w", err)
|
||||
}
|
||||
pConn, ok := packetConn.(*net.UDPConn)
|
||||
if !ok {
|
||||
return nil, errors.New("packet conn is not an UDPConn")
|
||||
|
@ -62,6 +58,25 @@ func Listen(listenConfig net.ListenConfig, network, address string, timeout time
|
|||
return l, nil
|
||||
}
|
||||
|
||||
// Listen creates a new listener.
|
||||
func Listen(listenConfig net.ListenConfig, network, address string, timeout time.Duration) (*Listener, error) {
|
||||
if timeout <= 0 {
|
||||
return nil, errors.New("timeout should be greater than zero")
|
||||
}
|
||||
|
||||
packetConn, err := listenConfig.ListenPacket(context.Background(), network, address)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("listen packet: %w", err)
|
||||
}
|
||||
|
||||
l, err := ListenPacketConn(packetConn, timeout)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("listen packet conn: %w", err)
|
||||
}
|
||||
|
||||
return l, nil
|
||||
}
|
||||
|
||||
// Accept waits for and returns the next connection to the listener.
|
||||
func (l *Listener) Accept() (*Conn, error) {
|
||||
c := <-l.acceptCh
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue