go-dnssd で service register をする

Add Service Registration by dapplebeforedawn · Pull Request #2 · soh335/go-dnssd · GitHub を送ってもらい go-dnssd を使って service register が出来るようになった。ありがたい。

func RegisterService() (*dnssd.Context, error) {
    txtRecords := map[string]string{
        "path": "/path-to-page.html",
    }

    rc := make(chan *dnssd.RegisterReply)
    ctx, err := dnssd.ServiceRegister(
        dnssd.DNSServiceFlagsSuppressUnusable,
        0, // most applications will pass 0
        "My Server",
        "_http._tcp.",
        "",   // empty string ends up as local domain
        "",   // most applications do not specify a host
        3000, // port the service is running on
        txtRecords,
        rc,
    )

    go dnssd.Process(ctx)

    if err != nil {
        return nil, err
    }

    registerReply, _ := <-rc
    fmt.Println("Register Reply: ", registerReply)
    return ctx, nil
}

context を release すると service register が cancel になるので不必要になるタイミングをとりやすい箇所で defer ctx.Release() とすると良さそう。

https://github.com/soh335/go-dnssd/blob/master/example/test.go