一、使用者空間
獲取套介面選項:
1. int getsockopt ( int sockfd, int level, int optname, void * optval, socklen_t *opteln ) 設定套介面選項:
2. int setsockopt ( int sockfd, int level, int optname, const void * optval, socklen_t *opteln )
二、核心空間
系統呼叫setsockopt是通過核心sys_setsockopt
函式實現的
asmlinkage long sys_setsockopt(
int fd,
int level,
int optname, char __user *optval,
int optlen)
return err;}
假如我們定義的套介面是ipproto_ip=0,所以我們將呼叫sol_ip套介面,err=sock->ops->setsockopt(sock, level, optname, optval, optlen),該鉤子為proto_ops型別,所以它指向了我們註冊的inet_stream_ops鉤子,所以setsockopt指向了sock_common_setsockopt函式(net/core/sock.c)
在net/ipv4/af_inet.c檔案中,函式inet_init註冊了inetsw_array
陣列 for(q = inetsw_array; q <
&inetsw_array[inetsw_array_len];+
+q)inet_register_protosw(q);
static struct inet_protosw inetsw_array=
,……};
譬如它註冊了inet_stream_ops針對tcp協議
const struct proto_ops inet_stream_ops =;
現在我們看介面函式sock_common_setsockopt
int sock_common_setsockopt(struct socket *sock,
int level,
int optname,
char __user *optval,
int optlen)
由於sk->sk_prot是指向協議的鉤子,如果它指向了tcp協議鉤子,setsockopt指向了tcp_setsockopt函式(net/ipv4/tcp.c)
struct proto tcp_prot =
int tcp_setsockopt(struct sock *sk,
int level,
int optname, char __user *optval,
int optlen)
如果註冊時sol_ip則由於isck->isck_af_ops是inet_connection_sock_af_ops型別的鉤子,此鉤子的註冊為
struct inet_connection_sock_af_ops ipv4_specific =;
註冊ip_setsockopt(net/ipv4/tcp_ipv4.c
)介面
int ip_setsockopt(struct sock *sk,
int level,
int optname, char __user *optval,
int optlen)
#endif
return err;}
到此我們知道了如果註冊時ipproto_ip最終會呼叫do_ip_setsockopt和nf_setsockopt函式
如果註冊了ipproto_tcp最終會呼叫do_tcp_setsockopt函式
DHCP的工作流程
1.dhcp 協議簡介 dhcp 全稱是 dynamic host configuration protocol 中文名為動態主機配置協議,它的前身是 bootp 它工作在 osi的應用層,是一種幫助計算機從指定的 dhcp 伺服器獲取它們的配置資訊的自舉協議。dhcp 使用客戶端 伺服器模式,請求...
Struts的工作流程
當actionservlet接受到乙個客戶請求時,將執行如下流程。流程 2 如果actionform例項不存在,就建立乙個actionform物件,把客戶提交的表單資料儲存到actionform物件中。3 根據配置資訊決定是否需要表單驗證。如果需要驗證,就呼叫actionform的validate ...
struts的工作流程!
已經開始接觸到框架了,今天是學習struts的第一天,感覺有點小暈!和周圍同學了解到以後工作可能會用的很少,哎!既然學了就好好搞懂吧!struts是一種組建,是實現web中一些 和結構的軟體。現在學的是struts1.2版本,struts是基於mvc的,有乙個actionservlet,客戶端的所以...