我使用的c构建了一个简单的应用程序recvmmsg(),传递的第五个参数是timeout type struct timespec.我将超时设置为5秒,但它不起作用,它会阻塞无限.
代码如下:
struct timespec timeout;
timeout.tv_sec = 5;
timeout.tv_nsec = 0;
result = recvmmsg(fd, datagrams, BATCH_SIZE, 0, &timeout);
Run Code Online (Sandbox Code Playgroud)
见这里:http://permalink.gmane.org/gmane.linux.man/3440
基本上,timeout参数指定等待更多消息的最长时间,但基础接收操作仍然是阻塞的.因此,如果您将超时设置为5秒并且每秒接收一条消息,则在接收(大约)5条消息后它将停止,即使缓冲区中有更多空间也是如此.如果根本没有数据,它不会在5秒后返回.为此,您应该使用常用机制之一,例如select()或epoll()超时或忙等待等.
| 归档时间: |
|
| 查看次数: |
1487 次 |
| 最近记录: |