// establish the net.UDPConn and context.Context here.
go func() {
for {
if err := conn.Read(p); err != nil {
return
}
// do something with p
}
}()
go func() {
<-ctx.Done()
conn.Close() // will interrupt the above goroutine with an error
return
}()
On Tue, Mar 21, 2017 at 5:18 PM, Florian Forster <[email protected]> wrote:
> Hi Go nuts,
>
> I have a (server) function that gets a context.Context and listens on a
> net.UDPConn. I would like this function to receive and handle network
> packets, but close the socket and return as soon as the context is
> cancelled.
>
> Ideally, I'd like to do something along these lines:
>
> for {
> select {
> case pkg := <- conn:
> handle(ctx, pkg)
> case <- ctx.Done():
> // defer conn.Close() is called here
> return ctx.Err()
> }
> }
>
> I'm unable to find anything that would allow me to select on the connection,
> unfortunately. Is there a way to turn an UDP socket into a channel?
>
> The next best thing would likely be to read from the connection with a
> relatively short timeout and check ctx.Done() periodically. That sort of
> busy waiting is not as elegant as I had hoped though.
>
> Thanks for any pointers you might be able to share! :) Best regards,
> —octo
>
> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.