3.21 Sockets-Options Socket选项要点:获取和设置及fcntl()用法

网安智编 厦门萤点网络科技 2025-08-15 00:04 87 0
3.21 - 选项 要点: 3.21.1 获取和设置选项3.21.2 fcntl() # # int fcntl(int sd,int cmd); int fcntl(int sd,int cmd,long arg); :读取描述符对应...

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 ()和()函数

#

#

Socket选项 fcntl函数 ioctl函数 getsockopt和setsockopt函数_getsockopt函数

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