Tôi đang chuyển một ứng dụng mạng của cửa sổ sang linux và gặp phải sự cố hết thời gian với cuộc gọi chọn trên linux. Các chức năng sau đây khối cho toàn bộ giá trị thời gian chờ và trả về trong khi tôi đã kiểm tra với một gói sniffer mà khách hàng đã gửi dữ liệu.Socket select() hoạt động trong Windows và hết giờ trong Linux
int recvTimeOutTCP(SOCKET socket, long sec, long usec)
{
struct timeval timeout;
fd_set fds;.
timeout.tv_sec = sec;
timeout.tv_usec = usec;
FD_ZERO(&fds);
FD_SET(socket, &fds);
// Possible return values:
// -1: error occurred
// 0: timed out
// > 0: data ready to be read
cerr << "Waiting on fd " << socket << endl;
return select(1, &fds, 0, 0, &timeout);
}
@jamessan Ah, vâng tôi có nghĩa là;) – epatel
Vâng, cảm ơn, Điều đó đã giải quyết được vấn đề của tôi. –
Phải. 'int select (int nfds, fd_set * readfds, fd_set * writefds, fd_set * exceptfds, struct timeval * timeout);' where nfds là 'bộ mô tả tập tin được đánh số cao nhất trong bất kỳ bộ ba nào, cộng với 1'. – jamessan