- 论坛徽章:
- 0
|
各位大侠帮着看一下是什么问题啊,在linux上有时会陷入select成功然后recvfrom返回eagain的死循环。
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
fd_set read_set;
FD_ZERO(&read_set);
FD_SET(m_udp_fd, &read_set);
int result = select(m_udp_fd + 1, &read_set, NULL, NULL, &tv);
if (result < 0)
{
ERROR_LOG("ERROR: select() failed, errno: %d, reason: %s", errno, strerror(errno));
return -1;
}
else if (result == 0)
{
return 0;
}
int rcvlen = recvfrom(m_udp_fd, p_data_buf, buf_len, 0, NULL, NULL);
if (rcvlen < 0)
{
ERROR_LOG("ERROR: recv(...) failed: %s", strerror(errno));
return -1;
} |
|