In libshout >=2.4.2 shout_open() can return SHOUTERR_RETRY in addition
to SHOUTERR_BUSY.
The nonblocking example in libshout fixes the problem in a similar
way, as mentioned by the author in this issue:
https://gitlab.xiph.org/xiph/icecast-libshout/-/issues/2316
Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/issues/848
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1363>
ret = shout_open (sink->conn);
/* wait for connection or timeout */
+#ifdef SHOUTERR_RETRY
+ /* starting with libshout 2.4.2, shout_open() has broken API + ABI and
+ * can also return SHOUTERR_RETRY (a new define) to mean "try again" */
+ while (ret == SHOUTERR_BUSY || ret == SHOUTERR_RETRY) {
+#else
while (ret == SHOUTERR_BUSY) {
+#endif
if (gst_util_get_timestamp () - start_ts > sink->timeout * GST_MSECOND) {
goto connection_timeout;
}