[BUG] server check intervals must not be null

If server check interval is null, we might end up looping in
process_srv_chk().

Prevent those values from being zero and add some control in
process_srv_chk() against infinite loops.
diff --git a/src/cfgparse.c b/src/cfgparse.c
index e5d6840..6fdbe17 100644
--- a/src/cfgparse.c
+++ b/src/cfgparse.c
@@ -1931,6 +1931,11 @@
 					      file, linenum, *err, newsrv->id);
 					return -1;
 				}
+				if (val <= 0) {
+					Alert("parsing [%s:%d]: invalid value %d for argument '%s' of server %s.\n",
+					      file, linenum, val, args[cur_arg], newsrv->id);
+					return -1;
+				}
 				newsrv->inter = val;
 				cur_arg += 2;
 			}
@@ -1941,6 +1946,11 @@
 					      file, linenum, *err, newsrv->id);
 					return -1;
 				}
+				if (val <= 0) {
+					Alert("parsing [%s:%d]: invalid value %d for argument '%s' of server %s.\n",
+					      file, linenum, val, args[cur_arg], newsrv->id);
+					return -1;
+				}
 				newsrv->fastinter = val;
 				cur_arg += 2;
 			}
@@ -1951,6 +1961,11 @@
 					      file, linenum, *err, newsrv->id);
 					return -1;
 				}
+				if (val <= 0) {
+					Alert("parsing [%s:%d]: invalid value %d for argument '%s' of server %s.\n",
+					      file, linenum, val, args[cur_arg], newsrv->id);
+					return -1;
+				}
 				newsrv->downinter = val;
 				cur_arg += 2;
 			}
@@ -1997,6 +2012,11 @@
 					      file, linenum, *err, newsrv->id);
 					return -1;
 				}
+				if (val <= 0) {
+					Alert("parsing [%s:%d]: invalid value %d for argument '%s' of server %s.\n",
+					      file, linenum, val, args[cur_arg], newsrv->id);
+					return -1;
+				}
 				newsrv->slowstart = (val + 999) / 1000;
 				cur_arg += 2;
 			}
diff --git a/src/checks.c b/src/checks.c
index 50b464f..b48179a 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -524,6 +524,7 @@
  */
 struct task *process_chk(struct task *t)
 {
+	int attempts = 0;
 	struct server *s = t->context;
 	struct sockaddr_in sa;
 	int fd;
@@ -532,6 +533,12 @@
 	//fprintf(stderr, "process_chk: task=%p\n", t);
 
  new_chk:
+	if (attempts++ > 0) {
+		/* we always fail to create a server, let's stop insisting... */
+		while (tick_is_expired(t->expire, now_ms))
+			t->expire = tick_add(t->expire, MS_TO_TICKS(s->inter));
+		return t;
+	}
 	fd = s->curfd;
 	if (fd < 0) {   /* no check currently running */
 		//fprintf(stderr, "process_chk: 2\n");