加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux套接字编程之套接字选项

发布时间:2016-09-23 22:55:22 所属栏目:Linux 来源:站长网
导读:套接字机制提供了两个套接字选项接口来控制套接字的行为。一个接口用来设置选项,另外一个接口用来允许我们请求选项的状态。我们可以获得以及设置三种类型的选

套接字机制提供了两个套接字选项接口来控制套接字的行为。一个接口用来设置选项,另外一个接口用来允许我们请求选项的状态。我们可以获得以及设置三种类型的选项。

1.通用选项,可以工作在所有的套接字类型。

2.在套接字层次上面进行管理的选项,但是依赖底部协议的支持。

3.和每个协议相关的协议选项。

Single UNIX Specification 只定义了套接字层的选项(上面所提到的前面两项)

我们可以通过setsockopt函数来设置套接字选项。

#include <sys/socket.h>

int setsockopt(int sockfd, int level, int option, const void *val, socklen_t len);

返回:如果成功返回0,如果错误返回1。

参数level用来分辨option所应用的协议。如果option是通用套接字层次的选项,那么level设置成SOL_SOCKET。否则level设置成控制option的协议号。例如IPPROTO_TCP用于TCP选项,以及IPPROTO_IP用于IP选项。下面的表中就列出了Single UNIX Specification定义的通用的套接字层次的选项。

     套接字选项

+-------------------------------------------------------------------------------------------------------------+

|    Option     | Type of val argument |                             Description                              |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_ACCEPTCONN | int                  | 返回套接字是否激活用于侦听(只用于getsockopt)。                     |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_BROADCAST  | int                  | 如果*val非0那么广播数据报。                                          |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_DEBUG      | int                  | 如果*val非0那么激活网络驱动的调试。                                  |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_DONTROUTE  | int                  | 如果*val非0,那么忽略通常的路由。                                    |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_ERROR      | int                  | 返回并且清除提交的套接字错误(只用于getsockopt)。                   |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_KEEPALIVE  | int                  | 如果*val非0,那么激活定期活动的消息。                                |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_LINGER     | struct linger        | 如果有未发送的消息存在以及套接字关闭,那么做延迟。                   |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_OOBINLINE  | int                  | 如果*val非0,那么将带外数据嵌入到正常数据中。                        |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_RCVBUF     | int                  | 接收缓存的字节大小。                                                 |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_RCVLOWAT   | int                  | receive调用返回的最小数据字节。                                      |

|---------------+----------------------+----------------------------------------------------------------------|

| SO_RCVTIMEO   | struct timeval       | 套接字receive调用的超时值。                                          |

|---------------+----------------------+----------------------------------------------------------------------|

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读