最近,我正在研究iw的源代码,试图了解libnl是如何工作的。
我在某些时候遇到了使用nl_socket_set_cb()的情况,原因是我无法理解。网络上也没有文档。
我的第一个怀疑是,当有数据要从nl套接字读取时,将回调函数关联起来,但这是在源代码的其他部分通过在调用iw.c时关联回调来实现的。
有人能照一下吗?是否多余?

最佳答案

如果使用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
https://github.com/thom311/libnl/blob/master/lib/handlers.c

10-06 09:12