Có một giai đoạn pha trộn nền tảng thời gian chờ để chấp nhận ứng dụng bằng cách sử dụng chức năng accept
mà không cần thiết lập ổ cắm để không chặn không?Làm thế nào để chấp nhận socket với thời gian chờ
Tôi biết rằng tôi nên sử dụng chức năng select
cho nó, nhưng những gì tôi đang làm sai?
SOCKET NativesAcceptClient(SOCKET s, int timeout)
{
int iResult;
struct timeval tv;
fd_set rfds;
FD_ZERO(&rfds);
FD_SET(s, &rfds);
tv.tv_sec = (long)timeout;
tv.tv_usec = 0;
iResult = select(s, &rfds, (fd_set *) 0, (fd_set *) 0, &tv);
if(iResult > 0)
{
return accept(s, NULL, NULL);
}
else
{
//always here, even if i connect from another application
}
return 0;
}
Cách khắc phục điều đó? Cảm ơn!
@ryanbwork no, timeout is 10 – Boris
Xem giải pháp dưới đây của tôi? – ryanbwork
là nó ngay lập tức bật ra khỏi lựa chọn hoặc là nó chờ đợi 10s trước khi bật ra (nếu bạn không kết nối với nó)? có vẻ ok (ngoài các s + 1 được đề cập cho các nền tảng không phải Windows), một cái gì đó khác là không ... – mark