thermferm/server.c

changeset 646
e3edc783006b
parent 645
49eb753a958b
child 652
16d3d4b58b5b
equal deleted inserted replaced
645:49eb753a958b 646:e3edc783006b
42 extern const char DEVDIR[7][11]; 42 extern const char DEVDIR[7][11];
43 extern const char PROFSTATE[5][6]; 43 extern const char PROFSTATE[5][6];
44 extern pthread_mutex_t mutexes[5]; 44 extern pthread_mutex_t mutexes[5];
45 45
46 46
47 int s; /* connected socket */ 47 int my_server_state = 0; /* Thread running state */
48 int ls; /* listen socket */ 48 int s; /* connected socket */
49 49 int ls; /* listen socket */
50 struct sockaddr_in myaddr_in; /* for local socket address */ 50
51 struct sockaddr_in peeraddr_in; /* for peer socket address */ 51 struct sockaddr_in myaddr_in; /* for local socket address */
52 struct sockaddr_in peeraddr_in; /* for peer socket address */
52 53
53 struct hostent *hp; 54 struct hostent *hp;
54 55
55 #define SS_BUFSIZE 1024 56 #define SS_BUFSIZE 1024
56 #define SS_TIMEOUT 300 57 #define SS_TIMEOUT 300
2141 close(s); 2142 close(s);
2142 } 2143 }
2143 2144
2144 2145
2145 2146
2146 #ifdef HAVE_WIRINGPI_H
2147 PI_THREAD (my_server_loop)
2148 #else
2149 void *my_server_loop(void *threadid) 2147 void *my_server_loop(void *threadid)
2150 #endif
2151 { 2148 {
2152 socklen_t addrlen; 2149 socklen_t addrlen;
2153 int optval = 1; 2150 int optval = 1;
2154 2151
2152 my_server_state = 1;
2155 syslog(LOG_NOTICE, "Thread my_server_loop started"); 2153 syslog(LOG_NOTICE, "Thread my_server_loop started");
2156 if (debug) 2154 if (debug)
2157 fprintf(stdout, "Thread my_server_loop started\n"); 2155 fprintf(stdout, "Thread my_server_loop started\n");
2158 2156
2159 memset((char *)&myaddr_in, 0, sizeof(struct sockaddr_in)); 2157 memset((char *)&myaddr_in, 0, sizeof(struct sockaddr_in));
2164 2162
2165 ls = socket(AF_INET, SOCK_STREAM, 0); 2163 ls = socket(AF_INET, SOCK_STREAM, 0);
2166 if (ls == -1) { 2164 if (ls == -1) {
2167 syslog(LOG_NOTICE, "Can't create listen socket: %s", strerror(errno)); 2165 syslog(LOG_NOTICE, "Can't create listen socket: %s", strerror(errno));
2168 fprintf(stderr, "Can't create listen socket: %s\n", strerror(errno)); 2166 fprintf(stderr, "Can't create listen socket: %s\n", strerror(errno));
2167 my_server_state = 0;
2169 return 0; 2168 return 0;
2170 } 2169 }
2171 2170
2172 if (setsockopt(ls, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval)) == -1) { 2171 if (setsockopt(ls, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(optval)) == -1) {
2173 syslog(LOG_NOTICE, "Can't setsockopt SO_KEEPALIVE socket: %s", strerror(errno)); 2172 syslog(LOG_NOTICE, "Can't setsockopt SO_KEEPALIVE socket: %s", strerror(errno));
2174 close(ls); 2173 close(ls);
2174 my_server_state = 0;
2175 return 0; 2175 return 0;
2176 } 2176 }
2177 2177
2178 if (setsockopt(ls, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1) { 2178 if (setsockopt(ls, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) == -1) {
2179 syslog(LOG_NOTICE, "Can't setsockopt SO_REUSEADDR socket: %s", strerror(errno)); 2179 syslog(LOG_NOTICE, "Can't setsockopt SO_REUSEADDR socket: %s", strerror(errno));
2180 close(ls); 2180 close(ls);
2181 my_server_state = 0;
2181 return 0; 2182 return 0;
2182 } 2183 }
2183 2184
2184 if (bind(ls, (struct sockaddr *)&myaddr_in, sizeof(struct sockaddr_in)) == -1) { 2185 if (bind(ls, (struct sockaddr *)&myaddr_in, sizeof(struct sockaddr_in)) == -1) {
2185 syslog(LOG_NOTICE, "Can't bind to listen socket: %s", strerror(errno)); 2186 syslog(LOG_NOTICE, "Can't bind to listen socket: %s", strerror(errno));
2186 close(ls); 2187 close(ls);
2188 my_server_state = 0;
2187 return 0; 2189 return 0;
2188 } 2190 }
2189 2191
2190 if (listen(ls, 5) == -1) { 2192 if (listen(ls, 5) == -1) {
2191 syslog(LOG_NOTICE, "Can't listen on listen socket: %s", strerror(errno)); 2193 syslog(LOG_NOTICE, "Can't listen on listen socket: %s", strerror(errno));
2192 close(ls); 2194 close(ls);
2195 my_server_state = 0;
2193 return 0; 2196 return 0;
2194 } 2197 }
2195 2198
2196 syslog(LOG_NOTICE, "listen socket created %d", ls); 2199 syslog(LOG_NOTICE, "listen socket created %d", ls);
2197 2200
2211 s = accept(ls, (struct sockaddr *)&peeraddr_in, &addrlen); 2214 s = accept(ls, (struct sockaddr *)&peeraddr_in, &addrlen);
2212 if (s == -1) { 2215 if (s == -1) {
2213 syslog(LOG_NOTICE, "my_server_loop accept failed %s", strerror(errno)); 2216 syslog(LOG_NOTICE, "my_server_loop accept failed %s", strerror(errno));
2214 if (debug) 2217 if (debug)
2215 fprintf(stdout, "my_server_loop accept failed %s\n", strerror(errno)); 2218 fprintf(stdout, "my_server_loop accept failed %s\n", strerror(errno));
2219 my_server_state = 0;
2216 return 0; 2220 return 0;
2217 } 2221 }
2218 2222
2219 cmd_server(); 2223 cmd_server();
2220 2224
2221 if (my_shutdown) { 2225 if (my_shutdown) {
2222 syslog(LOG_NOTICE, "Thread my_server_loop stopped"); 2226 syslog(LOG_NOTICE, "Thread my_server_loop stopped");
2223 if (debug) 2227 if (debug)
2224 fprintf(stdout, "Thread my_server_loop stopped\n"); 2228 fprintf(stdout, "Thread my_server_loop stopped\n");
2229 my_server_state = 0;
2225 return 0; 2230 return 0;
2226 } 2231 }
2227 usleep(100000); 2232 usleep(100000);
2228 } 2233 }
2229 } 2234 }

mercurial