- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
最近,我正在研究iw
的源代码,试图了解libnl
是如何工作的。
由于我无法理解的原因,我在 iw.c
的某个点遇到了 nl_socket_set_cb()
的使用。网络上也没有文档。
我的第一个怀疑是当有数据要从 nl 套接字读取时关联一个回调函数,但这是在源代码的其他部分通过调用 nl_recvmsgs()
时关联一个回调来完成的>.
任何人都可以阐明一下吗? nl_socket_set_cb()
是多余的吗?
最佳答案
如果您使用 nl_recvmsgs(sk, cb) , 你仍然需要使用 nl_socket_set_cb(sk, cb)如果您计划使用 NL_CB_MSG_OUT打回来。在通过套接字发送任何内容之前,在 nl_sendmsg()
中调用该回调。
但是,如果您改为使用 nl_recvmsgs_default(sk) , 那么 nl_socket_set_cb()
就很方便了,因为它将回调存储在 sk->s_cb
结构中,传递给发送和接收函数。
我认为 nl_socket_set_sb()
的真正用途是对同一个套接字重新使用 nl_recvmsgs_default()
,因为它似乎删除了任何先前设置的回调存储在 sk
结构中。
https://github.com/thom311/libnl/blob/master/lib/nl.c
https://github.com/thom311/libnl/blob/master/lib/socket.c
https://github.com/thom311/libnl/blob/master/include/netlink-private/types.h
关于c - libnl 中 nl_socket_set_cb() 的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24816230/
最近,我正在研究iw 的源代码,试图了解libnl 是如何工作的。 由于我无法理解的原因,我在 iw.c 的某个点遇到了 nl_socket_set_cb() 的使用。网络上也没有文档。 我的第一个怀
我是一名优秀的程序员,十分优秀!