本文共 1466 字,大约阅读时间需要 4 分钟。
在电脑开启时,configd
守护线程便会开启,进行网络配置,而 SystemConfiguration.framework
则是与该线程进行会话,从而管理网络配置的。
该框架主要有两个目的,一是提供动态的网络配置,使得用户可以对网络无缝连接,另一个是支持应用对网络的创建、修改以及网络服务的访问。
对于简单的网络连接状态变化,该框架中直接提供了一些方法,可以监听相关的状态值,从而避免开发人员去涉及较低层的方法,如常用的 AFNetworking
第三方库就使用了该框架中的方法来。
对于从事网络配置或拨号软件相关工作的开发人员,除了了解该框架中检查网络状态的相关方法,更应关注网络偏好设置和配置相关的方法。
框架中的一些名词:
Location 和 Set 都是对一个完整的网络配置的描述,只是使用的人不同而已。
系统网络配置分为多个部分,各个部分通过相互配合,才能够提供强大方便的网络服务,各部分如下:
从网络感知到网络服务提供及拨号应用的相关接口,该框架都有提供。只是需要创建、修改网络服务的接口较为底层,使用了专门的名词来描述相关配置,要进行底层网络服务的编程,需要先了解相关名词。并且,此操作需要修改配置文件,就需要根权限。另外,还会涉及到其他框架的使用,如创建一个网络服务,就需要结合 IOKit 框架中的方法。
在
/usr/sbin
下,有两个命令scutil
和scselect
,分别是网络system configure
的管理工具和选择命令。
在测试时,也可以使用
ipconfig
命令,来设置相关网络参数,具体使用方式可使用man ipconfig
命令查看。
实际上,可以打开 /Library/Preferences/SystemConfiguration/preferences.plist
配置文件,查看所有的网络配置信息,更好的理解配置信息的组织方式。但是,该文件对于该系统配置框架是私有的,不要在程序中直接使用它,或者编辑它。
这个文件存储了所有的网络配置,但是应用并不是从该文件获取网络动态的,而是通过读取动态存储的状态值。为了避免开发者的应用直接监听底层网络状态的变化,configuration agents
会根据底层事件来实时更新存储的动态网络配置,而顶层的应用只要通过该框架注册监听感兴趣的值即可。
当然,能使用框架提供的接口的,就应避免去监听具体的值,无法避免,则需要参考 SCSchemaDefinitions.h
文件,明白具体应该监听哪个值,也可参见官方文档 。
转载地址:http://qvdws.baihongyu.com/