From aff779b6f9c75523d491e1003c0c2d589c1eca20 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Mon, 19 Jul 2021 19:43:46 +0300 Subject: [PATCH] SO_REUSEPORT is applied only to multicast UDP ports --- doc/news.ru.texi | 10 ++++++++++ doc/news.texi | 9 +++++++++ ports/nncp/Makefile | 2 +- src/mcd.go | 16 ++++++++++------ src/nncp.go | 2 +- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/doc/news.ru.texi b/doc/news.ru.texi index 59dae28..8d0bca9 100644 --- a/doc/news.ru.texi +++ b/doc/news.ru.texi @@ -1,6 +1,16 @@ @node Новости @section Новости +@node Релиз 7.4.0 +@subsection Релиз 7.4.0 +@itemize + +@item +Исправлена работоспособность MCD при одновременном использовании +@command{nncp-daemon} и @command{nncp-caller}. + +@end itemize + @node Релиз 7.3.2 @subsection Релиз 7.3.2 @itemize diff --git a/doc/news.texi b/doc/news.texi index 4b6bb4c..c9106f8 100644 --- a/doc/news.texi +++ b/doc/news.texi @@ -3,6 +3,15 @@ See also this page @ref{Новости, on russian}. +@node Release 7_4_0 +@section Release 7.4.0 +@itemize + +@item +Fixed simultaneous @command{nncp-daemon} and @command{nncp-caller} MCD work. + +@end itemize + @node Release 7_3_2 @section Release 7.3.2 @itemize diff --git a/ports/nncp/Makefile b/ports/nncp/Makefile index d18cf56..70b6311 100644 --- a/ports/nncp/Makefile +++ b/ports/nncp/Makefile @@ -1,5 +1,5 @@ PORTNAME= nncp -DISTVERSION= 7.3.2 +DISTVERSION= 7.4.0 CATEGORIES= net MASTER_SITES= http://www.nncpgo.org/download/ diff --git a/src/mcd.go b/src/mcd.go index be40f42..60ca6a5 100644 --- a/src/mcd.go +++ b/src/mcd.go @@ -176,20 +176,24 @@ func (ctx *Ctx) MCDRx(ifiName string) error { } func (ctx *Ctx) MCDTx(ifiName string, port int, interval time.Duration) error { - conn, err := net.DialUDP("udp", - &net.UDPAddr{Port: port, Zone: ifiName}, - &net.UDPAddr{IP: mcdIP, Port: MCDPort, Zone: ifiName}, - ) + ifi, err := net.InterfaceByName(ifiName) + if err != nil { + return err + } + addr := &net.UDPAddr{IP: mcdIP, Port: port, Zone: ifiName} + conn, err := net.ListenMulticastUDP("udp", ifi, addr) if err != nil { return err } + + dst := &net.UDPAddr{IP: mcdIP, Port: MCDPort, Zone: ifiName} var buf bytes.Buffer mcd := MCD{Magic: MagicNNCPDv1.B, Sender: ctx.Self.Id} if _, err := xdr.Marshal(&buf, mcd); err != nil { panic(err) } if interval == 0 { - _, err = conn.Write(buf.Bytes()) + _, err = conn.WriteTo(buf.Bytes(), dst) return err } go func() { @@ -201,7 +205,7 @@ func (ctx *Ctx) MCDTx(ifiName string, port int, interval time.Duration) error { ifiName, MCDPort, port, ) }) - _, err = conn.Write(buf.Bytes()) + _, err = conn.WriteTo(buf.Bytes(), dst) if err != nil { ctx.LogE("mcd", les, err, func(les LEs) string { return fmt.Sprintf("MCD on %s/%d/%d", ifiName, MCDPort, port) diff --git a/src/nncp.go b/src/nncp.go index 94e1df8..64489bc 100644 --- a/src/nncp.go +++ b/src/nncp.go @@ -40,7 +40,7 @@ along with this program. If not, see .` const Base32Encoded32Len = 52 var ( - Version string = "7.3.2" + Version string = "7.4.0" Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding) ) -- 2.44.0