net-wait-go utility / library

06/30/2020 tcp udp docker

net-wait-go utility / library

What is it?

Both utility and GO package to wait for port to open (TCP, UDP).

Why do we need it?

In dockerized applications usually we deploy several containers with the main program container.
We need to know if containers are started, so we can continue to execute our program or fail it after some deadline.

There are a lot of examples through the internet that advise us to use several bash commands like nc, timeout, curl. But what if we have GO program minimal docker image FROM scratch that does not have bash? We could use this package as library in our program — just put couple lines of code to check if some ports are available.

But also this package can be donwloaded as utility and used from command line.

Library usage


import ""

if !wait.New().Do([]string{"postgres:5432"}) {
    logger.Error("db is not available")

All optional settings definition

import ""

if !wait.New(
).Do([]string{"postgres:5432"}) {
    logger.Error("db is not available")

Utility usage


  -addrs string
  -deadline uint
        deadline in milliseconds (default 10000)
        debug messages toggler
  -delay uint
        break between requests in milliseconds (default 50)
  -packet string
        UDP packet to be sent
  -proto string
        tcp (default "tcp")
  -wait uint
		delay of single request in milliseconds (default 100)

1 service check

net-wait-go -addrs -debug true
2020/06/30 18:07:38 is OK

return code is 0

2 services check

net-wait-go -addrs, -debug true
2020/06/30 18:09:24 is OK
2020/06/30 18:09:24 is OK

return code is 0

2 services check (fail)

net-wait-go -addrs, -debug true
2020/06/30 18:09:24 is FAILED
2020/06/30 18:09:24 is is FAILED
return code is 1

UDP support

Since UDP as protocol does not provide connection between a server and clients, it is not supported in the most of popular utilities:

net-wait-go provides UDP support, working following way:
  • sends a meaningful packet to the server
  • waits for a message back from the server (1 byte at least)

UDP packet example

Counter Strike game server is accessible via UDP. Let's check random Counter Strike server by sending A2S_INFO packet (

net-wait-go -proto udp -addrs, -packet '/////1RTb3VyY2UgRW5naW5lIFF1ZXJ5AA==' -debug true
2020/07/12 15:13:25 udp is OK
2020/07/12 15:13:25 udp is OK

# return code is 0

-packet value here is the base64-encoded A2S_INFO packet, which is documented here —

The sources

Available here —

Related articles