1. 整体架构
1.1. 命名UNIX域套接字
UNIX域套接字用于同一台机器上的运行的进程之间的通信,它是双向的、一种高效的IPC。UNIX域套接字可以使用标准的套接字接接口创建。
1.2. netlink
netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。
Netlink套接字可以使用标准的套接字接口来创建。socket(),bind(), sendmsg(), recvmsg()和 close()很容易地应用到 netlink socket。
2. iscsid实现
2.1.守护进程的实现
iscsid是一个守护进程,iscsistart和iscsiadm这两个程序通过IPC和守护进程iscsid通信,将任务委托给守护进程iscsid,iscsid执行完任务,将结果通过IPC反馈给iscsidstart或者iscsidadm。
2.1.1. 信号处理
相关结构:
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int,siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
};
struct sigaction:代表指定信号的处理动作。
字段名字 |
类型 |
说明 |
sa_handler |
函数指针 |
信号捕捉函数,当接受到信号时,该函数会被调用。系统根据不同的信号已经设置两个捕捉函数:SIG_IGN和SIG_DEF |
sa_mask |
sigset_t |
信号编号的一个集合,某个信号的捕捉函数被调用,且该信号在sa_mask中,那么后来的该信号将被阻塞,只有捕捉函数完成,该信号才能被递送。 |
sa_flags |
int |
指定对该信号进行处理的各个选项。 |
sa_sigaction |
函数指针 |
如Sa_flag中SA_SIGINFO被设置,那么捕捉函数将由sa_sigaction来完成而不是sa_handler。 |
int sigaction(int signum, conststruct sigaction *act, struct sigaction *oldact);
功能:检查或者修改于指定编号的信号相关的处理动作。
signum