3.21 Sockets-Options Socket选项要点:获取和设置及fcntl()用法
3.21 - 选项
要点:
3.21.1 获取和设置选项3.21.2 fcntl()
#
#
int fcntl(int sd,int cmd);
int fcntl(int sd,int cmd,long arg);
:读取描述符对应的所有标志,写入到返回值里。
:设置文件描述符的标志,设置值为arg;
:查找这个属于哪个进程,也就是哪个进程接收SIGIO和。进程号写入到返回值里。
:设置隶属的进程。
:查找出来当能运行I/O操作时发送的信号
:设置当I/O操作能运行时发送的信号。0值代表SIGIO。返回值是发送的信号,如果是SIGIO,则是0。
在使用fcntl()函数时,常见的错误是没有保留未修改标志。下面的例子就没有问题:
flags=fcntl(sd,,0);
fcntl(sd,,flags | );
3.21.3 ioctl()函数
#
int ioctl(int sd,int ,char*argp);
第三个参数是可选的,依赖于第二个参数。
命令
含意
从里会传递包给用户,传递会发生在具体时刻上,这个命令把最后的时刻返回到第三个参数里,类型为
设置接收SIGIO和信号的进程(进程组);这种情况下,第三个参数指向一个进程ID。这和fcntl()调用命令效果一样。
重置标志;第三个参数是标志值。这和fcntl()调用和效果一样。
获取接收信号的当前进程(或组)。这和使用fcntl()调用类似。
3.21.4 ()和()函数
#
#

int (int sd,int level,int ,void *, *);
int (int sd,int level,int ,const void *, );
int yes=1;
(sd,,,&yes,(yes));
上面是一个非常好的示例。
类型
含意
int
定期检查看连接是否有效
int
带外数据会被遗弃
int
发送和接收缓冲警戒线。在数据发送给协议或用户前,在缓冲里的最小字节个数
int
ucred
char*
绑定到一个指定设备上(比如eth0)。传递空值用来释放。(适用于多个网卡情况)
int
允许调试跟踪。只适用于超级用户
int
























