Tôi xây dựng một ứng dụng đơn giản bằng cách sử dụng c sử dụng recvmmsg()
và thông số thứ năm được thông qua là hết thời gian là type struct timespec
. Tôi thiết lập thời gian chờ đến 5 giây, nhưng nó không hoạt động, nó sẽ chặn vô cùng.Cách đặt thời gian chờ trong recvmmsg()?
Mã này là như sau:
struct timespec timeout;
timeout.tv_sec = 5;
timeout.tv_nsec = 0;
result = recvmmsg(fd, datagrams, BATCH_SIZE, 0, &timeout);
Có đề xuất về một lỗi có thể xảy ra ở đây có thể có liên quan: http://lists.openwall.net/netdev/2012/12/23/30 – Vicky
@Vicky: điều đó đúng - tương tự như liên kết trong câu trả lời. Tuy nhiên không rõ ai sẽ thay đổi hành vi - nhiều khả năng nó sẽ bị coi là lỗi tài liệu, trang người dùng sẽ được cập nhật và thông số hết thời gian chờ gần như vô dụng sẽ không được hầu hết các ứng dụng sử dụng. –
có một giải pháp khác trong liên kết tha ở trên sử dụng select: http://stackoverflow.com/questions/12713438/how-to-add-delay-to-sento-and-recvfrom-in-udp-client-server-in- c – MOHAMED