* David N <danowz...@gmail.com> [230724 01:11]: > I've posted this question on stackoverflow > <https://stackoverflow.com/questions/76447195/how-to-suspend-and-resume-accepting-new-connections-in-net-listener>, > discussed it with some members of the golang community, and I was > encouraged to post here. > > Problem: I have a secure application and I want to pause/resume accepting > network connections, calling `l.Accept()` blocks the thread, thus you can't > pause in a single-thread program. You can use goroutines but that still > isn't ideal, as the routine would still accept the connection first and > only then can close it if you're in "pause" mode. > > This could be solved by: > - having a non-blocking, async, `l.Accept()` > - returning a handle to (accepting) goroutine and killing/re-creating it > from main thread > - accepting connections in a separate process and communicating over a > socket > > The 1st one doesn't exist, the 2nd one is not accepted by the language > designers, and the 3rd one is unnecessarily complex and prone to break. > > This looks like a shortcoming of golang, is it worth discussing further > with lang designers?
I think a much more robust solution, which doesn't require any of the tricks mentioned so far in this thread, would be to have a goroutine that loops waiting for a signal (e.g. from a chan) and then uses ListenConfig to create a Listener with a Context. When you want to pause, simply use the Context to cancel the Listener. When you want to resume, send the signal. ...Marvin -- 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 golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/ZL5/6qpQNHsfHTvz%40basil.wdw.