卷2 第17章 插口选项
17.1 引言
本章讨论修改插口行为的系统调用。
17.2 代码介绍
kern/kern_descrip.c:fcntl
kern/uipc_syscalls.c:setsockopt/getsockopt
kern/uipc_socket.c:选项处理
kern/sys_socket.c:ioctl
17.3 setsockopt系统调用
SOL_SOCKET级选项
| 选项 | 说明 |
|---|
| SO_SNDBUF | 发送缓存大小 |
| SO_RCVBUF | 接收缓存大小 |
| SO_SNDLOWAT | 发送低水位 |
| SO_RCVLOWAT | 接收低水位 |
| SO_SNDTIMEO | 发送超时 |
| SO_RCVTIMEO | 接收超时 |
| SO_REUSEADDR | 重用地址 |
| SO_REUSEPORT | 重用端口 |
| SO_KEEPALIVE | 保活 |
| SO_DONTROUTE | 旁路路由 |
| SO_BROADCAST | 广播 |
| SO_LINGER | 拖延关闭 |
| SO_OOBINLINE | 带外数据内联 |
sosetopt函数
- 协议选项 → pr_ctloutput
- 插口选项 → switch处理
插口选项处理
- SO_LINGER:设置拖延时间
- 标志选项:设置/清除位
- 缓存选项:sb_reserve
- 超时选项:转换时间值
17.4 getsockopt系统调用
17.5 fcntl和ioctl系统调用
fcntl命令
| 命令 | 说明 |
|---|
| F_GETFL | 获取标志 |
| F_SETFL | 设置标志 |
| F_GETOWN | 获取进程ID |
| F_SETOWN | 设置进程ID |
ioctl命令
| 命令 | 说明 |
|---|
| FIONBIO | 非阻塞 |
| FIOASYNC | 异步通知 |
| FIONREAD | 可读字节数 |
| SIOCSPGRP | 设置进程组 |
| SIOCGPGRP | 获取进程组 |
| SIOCATMARK | 带外标记 |
17.6 getsockname系统调用
17.7 getpeername系统调用
17.8 小结
setsockopt/getsockopt管理插口选项。fcntl和ioctl提供额外控制。