diff --git a/src/audioOutputs/audioOutput_shout.c b/src/audioOutputs/audioOutput_shout.c index 8b8e789fb..82c793c99 100644 --- a/src/audioOutputs/audioOutput_shout.c +++ b/src/audioOutputs/audioOutput_shout.c @@ -30,11 +30,14 @@ #include #include #include +#include #include #include #include +#define CONN_ATTEMPT_INTERVAL 60 + static int shoutInitCount = 0; /* lots of this code blatantly stolent from bossogg/bossao2 */ @@ -68,6 +71,9 @@ typedef struct _ShoutData { MpdTag * tag; int tagToSend; + + int connAttempts; + time_t lastAttempt; } ShoutData; static ShoutData * newShoutData() { @@ -81,6 +87,8 @@ static ShoutData * newShoutData() { ret->tagToSend = 0; ret->bitrate = -1; ret->quality = -1.0; + ret->connAttempts = 0; + ret->lastAttempt = 0; return ret; } @@ -370,12 +378,20 @@ static int initEncoder(ShoutData * sd) { static int myShout_openShoutConn(AudioOutput * audioOutput) { ShoutData * sd = (ShoutData *)audioOutput->data; + time_t t = time(NULL); - if(shout_open(sd->shoutConn) != SHOUTERR_SUCCESS) - { - ERROR("problem opening connection to shout server: %s\n", + sd->connAttempts++; + + if(t - sd->lastAttempt < CONN_ATTEMPT_INTERVAL) { + return -1; + } + + sd->lastAttempt = t; + + if(shout_open(sd->shoutConn) != SHOUTERR_SUCCESS) { + ERROR("problem opening connection to shout server (attempt %i):" + " %s\n", sd->connAttempts, shout_get_error(sd->shoutConn)); - return -1; } @@ -404,8 +420,7 @@ static int myShout_openShoutConn(AudioOutput * audioOutput) { } } - /*if(sd->tag) freeMpdTag(sd->tag); - sd->tag = NULL;*/ + sd->connAttempts = 0; return 0; }