diff -u -r src.orig/cfgparse.c src/cfgparse.c --- src.orig/cfgparse.c Tue Jan 4 18:11:59 2005 +++ src/cfgparse.c Fri Jul 14 23:02:46 2006 @@ -54,6 +54,7 @@ #define DEFAULT_RESAMPLE 0 #define DEFAULT_RECONN_DELAY 2 #define DEFAULT_RECONN_ATTEMPTS 10 +#define DEFAULT_RETRY_INIT 0 #define DEFAULT_MAXQUEUELENGTH 100 /* Make it _BIG_ by default */ #define DEFAULT_SAVEFILENAME NULL /* NULL == don't save */ @@ -138,6 +139,7 @@ instance->resampleoutrate = DEFAULT_RESAMPLE; instance->reconnect_delay = DEFAULT_RECONN_DELAY; instance->reconnect_attempts = DEFAULT_RECONN_ATTEMPTS; + instance->retry_initial_connection = DEFAULT_RETRY_INIT; instance->max_queue_length = DEFAULT_MAXQUEUELENGTH; instance->savefilename = DEFAULT_SAVEFILENAME; @@ -255,6 +257,8 @@ SET_INT(instance->reconnect_delay); else if(strcmp(node->name, "reconnectattempts") == 0) SET_INT(instance->reconnect_attempts); + else if(strcmp(node->name, "retry") == 0) + SET_INT(instance->retry_initial_connection); else if(strcmp(node->name, "maxqueuelength") == 0) SET_INT(instance->max_queue_length); else if(strcmp(node->name, "downmix") == 0) diff -u -r src.orig/cfgparse.h src/cfgparse.h --- src.orig/cfgparse.h Tue Jan 4 18:10:15 2005 +++ src/cfgparse.h Fri Jul 14 23:02:46 2006 @@ -25,7 +25,7 @@ struct _module_param_tag *next; } module_param_t; -/* FIXME: orward declaraction because my headers are a mess. */ +/* FIXME: forward declaraction because my headers are a mess. */ struct buffer_queue; typedef struct _instance_tag @@ -37,6 +37,7 @@ char *mount; int reconnect_delay; int reconnect_attempts; + int retry_initial_connection; int encode; int downmix; int resampleinrate; diff -u -r src.orig/stream.c src/stream.c --- src.orig/stream.c Fri Nov 5 20:19:54 2004 +++ src/stream.c Fri Jul 14 23:26:19 2006 @@ -50,7 +50,7 @@ */ void *ices_instance_stream(void *arg) { - int ret, shouterr; + int ret, shouterr, initial_attempts; ref_buffer *buffer; stream_description *sdsc = arg; instance_t *stream = sdsc->stream; @@ -214,6 +214,8 @@ LOG_INFO1("Saving stream to file %s", stream->savefilename); } + initial_attempts = 0; +retry: if((shouterr = shout_open(sdsc->shout)) == SHOUTERR_SUCCESS) { LOG_INFO3("Connected to server: %s:%d%s", @@ -340,6 +342,17 @@ } else { + if (stream->retry_initial_connection && + (initial_attempts++ < stream->reconnect_attempts || + stream->reconnect_attempts == -1) && + !ices_config->shutdown) + { + shout_close(sdsc->shout); + LOG_WARN4("Retrying connection to %s:%d (%s: %s)", + shout_get_host(sdsc->shout),shout_get_port(sdsc->shout), shout_get_error(sdsc->shout), strerror(errno)); + thread_sleep (stream->reconnect_delay*1000000); + goto retry; + } LOG_ERROR4("Failed initial connect to %s:%d (%s: %s)", shout_get_host(sdsc->shout),shout_get_port(sdsc->shout), shout_get_error(sdsc->shout), strerror(errno)); }