- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个这样的函数:
static int
rcv_kern(int sock, void *buf, int len, struct sockaddr *addr,
socklen_t *addrlen)
{
struct timeval timeout = {1, 0};
fd_set set;
int status;
FD_SET(sock, &set);
if ((status = select(sock + 1, &set, NULL, NULL, &timeout)) == 0) {
FD_ZERO(&set);
fprintf(stderr,
"timeout while receiving answer from kernel\n");
exit(1);
} else if (status == -1) {
FD_ZERO(&set);
perror("recvfrom failed");
exit(1);
}
FD_ZERO(&set);
return recvfrom(sock, buf, len, 0, addr, addrlen);
}
用于使用 netlink 从内核空间接收消息。但是当我运行它时,结果总是从源代码中显示“从内核接收答案时超时”的消息,这是由于“select”方法总是返回“0”的原因。不知道是什么原因,谁能给我点建议,谢谢。
最佳答案
查理,
几件事:
1) 你可能应该循环你的 select() 调用,并且只有在 FD_ISSET() 在你的文件描述符上返回 true 时才调用 recvfrom。
2) 确保在 netlink 套接字上发送的实际驱动程序或内核代码实际上正在向其写入/发送数据。如果不是,那么如果它在 1 秒内没有接收到数据,那么您的函数将超时。 (这就是您设置的超时时间)。
一些一般性评论...在 Linux 中,当使用 select() 系统调用时。超时数据结构在每次调用后都会重置,因此如果您将代码更改为围绕选择循环,您可能应该这样做......您必须为循环中的每次迭代重置超时值。
另外,如果 select 超时,那并不一定意味着它是一个错误。请记住,select 是一个非阻塞调用。它只会在套接字上等待给定的“超时”时间并返回。如果你无论如何都想从文件描述符中读取...意味着你希望你的 recv_kern() 函数阻塞直到有数据返回,那么不要费心使用 select()。直接在文件描述符上调用 recvfrom() 即可。这样,您的 recv_kernel() 函数将阻塞并仅在读取内核发送的数据后返回。
如果不了解更多关于如何使用此代码的上下文,很难在此处提供更具体的帮助。我假设这是您编写的将数据发送到用户空间的自定义内核模块,对吗?
尝试将 recv_kern() 函数更改为阻塞(取出选择代码并调用 recvfrom())。这种方式应该能够判断您的内核驱动程序是否实际上正确地将数据发送到用户空间。如果你在 recvfrom() 上阻塞并且什么都没有返回..那么你的内核驱动程序也可能有问题。
希望对您有所帮助。
关于Linux套接字编程调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/822964/
我使用下拉菜单提供一些不同的链接,但我希望这些链接在同一选项卡中打开,而不是在新选项卡中打开。这是我找到的代码,但我对 Javascript 非常缺乏知识 var urlmenu = docume
我对 javascript 不太了解。但我需要一个垂直菜单上的下拉菜单,它是纯 JavaScript,所以我从 W3 复制/粘贴脚本:https://www.w3schools.com/howto/t
我已经坐了 4 个小时,试图让我的导航显示下 zipper 接垂直,但它继续水平显示它们。我无法弄清楚为什么会发生这种情况或如何解决它。 如果有人能告诉我我做错了什么,我将不胜感激。我有一个潜移默化的
我正在尝试创建选项卡式 Accordion 样式下拉菜单。我使用 jQuery 有一段时间了,但无法使事件状态达到 100%。 我很确定这是我搞砸的 JS。 $('.service-button').
对于那些从未访问过 Dropbox 的人,这里是链接 https://www.dropbox.com/ 查看“登录”的下拉菜单链接。我如何创建这样的下 zipper 接? 最佳答案 这是 fiddle
我正在制作一个 Liferay 主题,但我在尝试设计导航菜单的样式时遇到了很多麻烦。我已经为那些没有像这样下拉的人改变了导航链接上的经典主题悬停功能: .aui #navigation .nav li
如果您将鼠标悬停在 li 上,则会出现一个下拉菜单。如果您将指针向下移至悬停时出现的 ul,我希望链接仍然带有下划线,直到您将箭头从 ul 或链接移开。这样你就知道当菜单下拉时你悬停在哪个菜单上。 知
我有一个带有多个下拉菜单的导航栏。因此,当我单击第一个链接时,它会打开下拉菜单,但是当我单击第二个链接时,第一个下拉菜单不会关闭。 (所以如果用户点击第二个链接我想关闭下拉菜单) // main.js
我正在尝试制作一个导航下拉菜单(使用 Bootstrap 3),其中链接文本在同一行上有多个不同的对齐方式。 在下面的代码中,下拉列表 A 中的链接在 HTML 中有空格字符来对齐它们,但是空白被忽略
我希望有人能帮我解决这个 Bootstrap 问题,因为我很困惑。 有人要求我在底部垂直对齐图像和其中包含图像的链接。 我面临的问题是他们还希望链接在链接/图像组合上具有 pull-right,这会杀
我正在构建一个 Rails 应用程序,并希望指向我的类的每个实例的“显示”页面的链接显示在“索引”页面的下拉列表中。我目前正在使用带有 options_from_collection_for_sele
我有以下 Bootstrap3 导航菜单 ( fiddle here )。我想设置“突出显示”项及其子链接与下拉列表 1 和 2 链接不同的链接文本(和悬停)的样式。我还希望能够以不同于 Highli
我对导航栏中的下拉菜单有疑问。对于普通的导航链接(无下拉菜单),我将菜单文本放在 H3 中,但是当我尝试对下 zipper 接执行相同操作时,箭头不在标题旁边,而是在标题下方。我决定用 span 替换
我是一名优秀的程序员,十分优秀!