diff -r 49eb753a958b -r e3edc783006b thermferm/server.c --- a/thermferm/server.c Sat Mar 23 12:18:14 2024 +0100 +++ b/thermferm/server.c Sat Mar 23 16:01:24 2024 +0100 @@ -44,11 +44,12 @@ extern pthread_mutex_t mutexes[5]; -int s; /* connected socket */ -int ls; /* listen socket */ +int my_server_state = 0; /* Thread running state */ +int s; /* connected socket */ +int ls; /* listen socket */ -struct sockaddr_in myaddr_in; /* for local socket address */ -struct sockaddr_in peeraddr_in; /* for peer socket address */ +struct sockaddr_in myaddr_in; /* for local socket address */ +struct sockaddr_in peeraddr_in; /* for peer socket address */ struct hostent *hp; @@ -2143,15 +2144,12 @@ -#ifdef HAVE_WIRINGPI_H -PI_THREAD (my_server_loop) -#else void *my_server_loop(void *threadid) -#endif { socklen_t addrlen; int optval = 1; + my_server_state = 1; syslog(LOG_NOTICE, "Thread my_server_loop started"); if (debug) fprintf(stdout, "Thread my_server_loop started\n"); @@ -2166,30 +2164,35 @@ if (ls == -1) { syslog(LOG_NOTICE, "Can't create listen socket: %s", strerror(errno)); fprintf(stderr, "Can't create listen socket: %s\n", strerror(errno)); + my_server_state = 0; return 0; } if (setsockopt(ls, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval)) == -1) { syslog(LOG_NOTICE, "Can't setsockopt SO_KEEPALIVE socket: %s", strerror(errno)); close(ls); + my_server_state = 0; return 0; } if (setsockopt(ls, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1) { syslog(LOG_NOTICE, "Can't setsockopt SO_REUSEADDR socket: %s", strerror(errno)); close(ls); + my_server_state = 0; return 0; } if (bind(ls, (struct sockaddr *)&myaddr_in, sizeof(struct sockaddr_in)) == -1) { syslog(LOG_NOTICE, "Can't bind to listen socket: %s", strerror(errno)); close(ls); + my_server_state = 0; return 0; } if (listen(ls, 5) == -1) { syslog(LOG_NOTICE, "Can't listen on listen socket: %s", strerror(errno)); close(ls); + my_server_state = 0; return 0; } @@ -2213,6 +2216,7 @@ syslog(LOG_NOTICE, "my_server_loop accept failed %s", strerror(errno)); if (debug) fprintf(stdout, "my_server_loop accept failed %s\n", strerror(errno)); + my_server_state = 0; return 0; } @@ -2222,6 +2226,7 @@ syslog(LOG_NOTICE, "Thread my_server_loop stopped"); if (debug) fprintf(stdout, "Thread my_server_loop stopped\n"); + my_server_state = 0; return 0; } usleep(100000);