diff --git a/src/conf.c b/src/conf.c
index 71e45092..3c645197 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -373,9 +373,10 @@ bool read_server_config(void) {
 	read_config_options(config_tree, NULL);
 
 	xasprintf(&fname, "%s" SLASH "tinc.conf", confbase);
+	errno = 0;
 	x = read_config_file(config_tree, fname);
 
-	if(!x)
+	if(!x && errno)
 		logger(DEBUG_ALWAYS, LOG_ERR, "Failed to read `%s': %s", fname, strerror(errno));
 
 	free(fname);
diff --git a/src/net.c b/src/net.c
index 0b43d5ac..bf6cfcf1 100644
--- a/src/net.c
+++ b/src/net.c
@@ -298,7 +298,8 @@ static void sigterm_handler(void *data) {
 static void sighup_handler(void *data) {
 	logger(DEBUG_ALWAYS, LOG_NOTICE, "Got %s signal", strsignal(((signal_t *)data)->signum));
 	reopenlogger();
-	reload_configuration();
+	if(reload_configuration())
+		exit(1);
 }
 
 static void sigalrm_handler(void *data) {
@@ -316,8 +317,7 @@ int reload_configuration(void) {
 	init_configuration(&config_tree);
 
 	if(!read_server_config()) {
-		logger(DEBUG_ALWAYS, LOG_ERR, "Unable to reread configuration file, exitting.");
-		event_exit();
+		logger(DEBUG_ALWAYS, LOG_ERR, "Unable to reread configuration file.");
 		return EINVAL;
 	}