]> Cypherpunks.ru repositories - nncp.git/commitdiff
SO_REUSEPORT is applied only to multicast UDP ports
authorSergey Matveev <stargrave@stargrave.org>
Mon, 19 Jul 2021 16:43:46 +0000 (19:43 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 19 Jul 2021 16:51:19 +0000 (19:51 +0300)
doc/news.ru.texi
doc/news.texi
ports/nncp/Makefile
src/mcd.go
src/nncp.go

index 59dae28d3b1c5e7bb405d539e95d59871059fab5..8d0bca9c0c072d2782cda1f739d09cf233df277d 100644 (file)
@@ -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
index 4b6bb4c9761ed59d445dcee2e7d9503a6b4a90d5..c9106f8c7b52b049abbec7ad649a60e4ba3644d1 100644 (file)
@@ -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
index d18cf568e30bf9aa598da42aa459d5e7c78ca7f9..70b6311792ce8f43b267f56dc762cfb9ab99ad0f 100644 (file)
@@ -1,5 +1,5 @@
 PORTNAME=      nncp
-DISTVERSION=   7.3.2
+DISTVERSION=   7.4.0
 CATEGORIES=    net
 MASTER_SITES=  http://www.nncpgo.org/download/
 
index be40f42de1edd50f03e0a1bc5d045ce88bf76bb5..60ca6a5521010933c3b62a5cc0dd61bf368fed37 100644 (file)
@@ -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)
index 94e1df854b0a20fa112fb2793ebdacd71e8f0e05..64489bc27fbe7c9df87b435bfd8458cd95c7578d 100644 (file)
@@ -40,7 +40,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.`
 const Base32Encoded32Len = 52
 
 var (
-       Version string = "7.3.2"
+       Version string = "7.4.0"
 
        Base32Codec *base32.Encoding = base32.StdEncoding.WithPadding(base32.NoPadding)
 )