|
|
@ -29,6 +29,7 @@ class XSUDP : public I_XSUDP { |
|
|
|
virtual xs_error_code_t receive(char* data, int32_t& length, XsyncNetAdd& from, int overtimems) override; |
|
|
|
virtual xs_error_code_t startReceive(onMessage_t onMessage) override; |
|
|
|
virtual xs_error_code_t stopReceive() override; |
|
|
|
virtual xs_error_code_t clearRxBuffer() override; |
|
|
|
virtual ~XSUDP(); |
|
|
|
}; |
|
|
|
|
|
|
@ -68,8 +69,8 @@ xs_error_code_t XSUDP::receive(char* data, int32_t& length, XsyncNetAdd& from, i |
|
|
|
struct sockaddr_in sockaddr = {0}; |
|
|
|
|
|
|
|
timeval timeout; |
|
|
|
timeout.tv_sec = overtimems; |
|
|
|
timeout.tv_usec = 0; |
|
|
|
timeout.tv_sec = overtimems / 1000; |
|
|
|
timeout.tv_usec = overtimems % 1000 * 1000; |
|
|
|
if (setsockopt(m_sock_fd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout)) == -1) { |
|
|
|
return kxs_ec_setsockopt_rx_timeout_fail; |
|
|
|
} |
|
|
@ -129,6 +130,20 @@ xs_error_code_t XSUDP::stopReceive() { |
|
|
|
m_rxbufsize = 0; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
xs_error_code_t XSUDP::clearRxBuffer() { |
|
|
|
char buf[1024]; |
|
|
|
int32_t length = 1024; |
|
|
|
XsyncNetAdd from; |
|
|
|
xs_error_code_t ret = kxs_ec_success; |
|
|
|
|
|
|
|
while (ret == kxs_ec_success) { |
|
|
|
ret = receive(buf, length, from, 1); |
|
|
|
} |
|
|
|
|
|
|
|
return kxs_ec_success; |
|
|
|
} |
|
|
|
|
|
|
|
XSUDP::~XSUDP() { |
|
|
|
stopReceive(); |
|
|
|
|
|
|
|