canlogserver: Close accsocket and can when tcp client disconnected
Close all can socket and send "FYI" to tcp client when the tcp client disconnected. Signed-off-by: qianfan Zhao <qianfanguijin@163.com>pull/149/head
parent
c10c049ce7
commit
0003cad81a
|
|
@ -314,7 +314,9 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
if ((s[i] = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) {
|
if ((s[i] = socket(PF_CAN, SOCK_RAW, CAN_RAW)) < 0) {
|
||||||
perror("socket");
|
perror("socket");
|
||||||
return 1;
|
while (--i > 0)
|
||||||
|
close(s[i]);
|
||||||
|
goto close_accsocket;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mask[i] || value[i]) {
|
if (mask[i] || value[i]) {
|
||||||
|
|
@ -371,17 +373,32 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
while (running) {
|
while (running) {
|
||||||
|
|
||||||
FD_ZERO(&rdfs);
|
int maxfd = accsocket;
|
||||||
for (i=0; i<currmax; i++)
|
|
||||||
FD_SET(s[i], &rdfs);
|
|
||||||
|
|
||||||
if ((ret = select(s[currmax-1]+1, &rdfs, NULL, NULL, NULL)) < 0) {
|
FD_ZERO(&rdfs);
|
||||||
|
FD_SET(accsocket, &rdfs);
|
||||||
|
for (i=0; i<currmax; i++) {
|
||||||
|
maxfd = s[i] > maxfd ? s[i] : maxfd;
|
||||||
|
FD_SET(s[i], &rdfs);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((ret = select(maxfd + 1, &rdfs, NULL, NULL, NULL)) < 0) {
|
||||||
//perror("select");
|
//perror("select");
|
||||||
running = 0;
|
running = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i=0; i<currmax; i++) { /* check all CAN RAW sockets */
|
for (i=0; i<currmax; i++) { /* check all CAN RAW sockets */
|
||||||
|
if (FD_ISSET(accsocket, &rdfs)) {
|
||||||
|
char unused[64];
|
||||||
|
|
||||||
|
nbytes = recv(accsocket, unused, sizeof(unused), 0);
|
||||||
|
if (nbytes <= 0) {
|
||||||
|
if (nbytes < 0)
|
||||||
|
perror("accsocket read");
|
||||||
|
goto close_can;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (FD_ISSET(s[i], &rdfs)) {
|
if (FD_ISSET(s[i], &rdfs)) {
|
||||||
|
|
||||||
|
|
@ -391,7 +408,7 @@ int main(int argc, char **argv)
|
||||||
if ((nbytes = recvfrom(s[i], &frame, CANFD_MTU, 0,
|
if ((nbytes = recvfrom(s[i], &frame, CANFD_MTU, 0,
|
||||||
(struct sockaddr*)&addr, &len)) < 0) {
|
(struct sockaddr*)&addr, &len)) < 0) {
|
||||||
perror("read");
|
perror("read");
|
||||||
return 1;
|
goto close_can;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((size_t)nbytes == CAN_MTU)
|
if ((size_t)nbytes == CAN_MTU)
|
||||||
|
|
@ -400,7 +417,7 @@ int main(int argc, char **argv)
|
||||||
maxdlen = CANFD_MAX_DLEN;
|
maxdlen = CANFD_MAX_DLEN;
|
||||||
else {
|
else {
|
||||||
fprintf(stderr, "read: incomplete CAN frame\n");
|
fprintf(stderr, "read: incomplete CAN frame\n");
|
||||||
return 1;
|
goto close_can;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ioctl(s[i], SIOCGSTAMP, &tv) < 0)
|
if (ioctl(s[i], SIOCGSTAMP, &tv) < 0)
|
||||||
|
|
@ -416,7 +433,7 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
if (write(accsocket, temp, strlen(temp)) < 0) {
|
if (write(accsocket, temp, strlen(temp)) < 0) {
|
||||||
perror("writeaccsock");
|
perror("writeaccsock");
|
||||||
return 1;
|
goto close_can;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
@ -430,9 +447,11 @@ int main(int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
close_can:
|
||||||
for (i=0; i<currmax; i++)
|
for (i=0; i<currmax; i++)
|
||||||
close(s[i]);
|
close(s[i]);
|
||||||
|
|
||||||
|
close_accsocket:
|
||||||
close(accsocket);
|
close(accsocket);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue