83 {
85 struct pollfd fds[1];
87 fds[0].events = POLLIN;
89
90 sockaddr_in sender_address;
91 socklen_t sender_address_len = sizeof(sender_address);
92
93 while (true) {
94
95
96
97 do {
99 if (retval < 0) {
100 if (errno != EINTR)
101 AERROR <<
"poll() error: " << strerror(errno);
102
103 return 1;
104 }
105 if (retval == 0) {
106 AERROR <<
"lslidar poll() timeout, port: " <<
port_;
107 return 1;
108 }
109 if ((fds[0].revents & POLLERR) || (fds[0].revents & POLLHUP)
110 || (fds[0].revents & POLLNVAL)) {
111 AWARN <<
"poll() reports lslidar error";
112 return 1;
113 }
114 } while ((fds[0].revents & POLLIN) == 0);
115 uint8_t bytes[1212];
116 ssize_t nbytes = recvfrom(
118 bytes,
120 0,
121 reinterpret_cast<sockaddr *>(&sender_address),
122 &sender_address_len);
123 if (nbytes < 0) {
124 if (errno != EWOULDBLOCK) {
126 return 1;
127 }
129 if (sender_address.sin_addr.s_addr !=
devip_.s_addr) {
130 AERROR <<
"lidar IP parameter set error,please reset in config "
131 "file";
132 continue;
133 } else {
135 break;
136 }
137 }
138 AERROR <<
"incomplete lslidar packet read: " << nbytes <<
" bytes";
139 }
140
141
142
145 return 0;
146}
Cyber has builtin time type Time.
uint64_t ToNanosecond() const
convert time to nanosecond.
static Time Now()
get the current time.
double ToSecond() const
convert time to second.