You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2022/06/23 14:57:50 UTC

[plc4x] 02/02: fix(plc4go): fix so_reuse

This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit fd0eddda14eae0df3f75d061e37b6a1b7428a71a
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Jun 23 16:57:41 2022 +0200

    fix(plc4go): fix so_reuse
---
 plc4go/internal/spi/transports/udp/Transport.go | 17 ++++++++---------
 1 file changed, 8 insertions(+), 9 deletions(-)

diff --git a/plc4go/internal/spi/transports/udp/Transport.go b/plc4go/internal/spi/transports/udp/Transport.go
index 94ebe4f6b..1a6be5dea 100644
--- a/plc4go/internal/spi/transports/udp/Transport.go
+++ b/plc4go/internal/spi/transports/udp/Transport.go
@@ -143,20 +143,19 @@ func (m *TransportInstance) Connect() error {
 
 	// "connect" to the remote
 	var err error
-	if m.SoReUse {
-		if m.udpConn, err = net.ListenUDP("udp", m.LocalAddress); err != nil {
+	if m.RemoteAddress != nil {
+		if m.udpConn, err = net.DialUDP("upd", m.LocalAddress, m.RemoteAddress); err != nil {
 			return errors.Wrap(err, "error connecting to remote address")
 		}
-		rawConn, err := m.udpConn.SyscallConn()
-		if err != nil {
-			return errors.Wrap(err, "Error getting syscall connection")
-		}
-		if err := reuseport.Control("", "", rawConn); err != nil {
-			return errors.Wrap(err, "Error setting re-use control")
+	} else if m.SoReUse {
+		if packetConn, err := reuseport.ListenPacket("udp", m.LocalAddress.String()); err != nil {
+			return errors.Wrap(err, "error connecting to local address")
+		} else {
+			m.udpConn = packetConn.(*net.UDPConn)
 		}
 	} else {
 		if m.udpConn, err = net.ListenUDP("udp", m.LocalAddress); err != nil {
-			return errors.Wrap(err, "error connecting to remote address")
+			return errors.Wrap(err, "error connecting to local address")
 		}
 	}