canbusload: use recvmsg() instead of recvfrom()
To access msg_flags for RX/TX direction detection. Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>pull/556/head
parent
7665e1e236
commit
724e6f7c11
21
canbusload.c
21
canbusload.c
|
|
@ -251,6 +251,8 @@ int main(int argc, char **argv)
|
||||||
char *ptr, *nptr;
|
char *ptr, *nptr;
|
||||||
struct sockaddr_can addr;
|
struct sockaddr_can addr;
|
||||||
struct canfd_frame frame;
|
struct canfd_frame frame;
|
||||||
|
struct iovec iov;
|
||||||
|
struct msghdr msg;
|
||||||
int nbytes, i;
|
int nbytes, i;
|
||||||
|
|
||||||
int have_anydev = 0;
|
int have_anydev = 0;
|
||||||
|
|
@ -405,10 +407,14 @@ int main(int argc, char **argv)
|
||||||
if (redraw)
|
if (redraw)
|
||||||
printf("%s", CLR_SCREEN);
|
printf("%s", CLR_SCREEN);
|
||||||
|
|
||||||
while (running) {
|
/* these settings are static and can be held out of the hot path */
|
||||||
socklen_t len = sizeof(addr);
|
iov.iov_base = &frame;
|
||||||
int flags = 0;
|
msg.msg_name = &addr;
|
||||||
|
msg.msg_iov = &iov;
|
||||||
|
msg.msg_iovlen = 1;
|
||||||
|
msg.msg_control = NULL;
|
||||||
|
|
||||||
|
while (running) {
|
||||||
FD_ZERO(&rdfs);
|
FD_ZERO(&rdfs);
|
||||||
FD_SET(s, &rdfs);
|
FD_SET(s, &rdfs);
|
||||||
|
|
||||||
|
|
@ -417,8 +423,13 @@ int main(int argc, char **argv)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
nbytes = recvfrom(s, &frame, sizeof(struct canfd_frame),
|
/* these settings may be modified by recvmsg() */
|
||||||
flags, (struct sockaddr*)&addr, &len);
|
iov.iov_len = sizeof(frame);
|
||||||
|
msg.msg_namelen = sizeof(addr);
|
||||||
|
msg.msg_controllen = 0;
|
||||||
|
msg.msg_flags = 0;
|
||||||
|
|
||||||
|
nbytes = recvmsg(s, &msg, 0);
|
||||||
|
|
||||||
if (nbytes < 0) {
|
if (nbytes < 0) {
|
||||||
perror("read");
|
perror("read");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue