SO_BROADCAST套接口选项

此选项使能或禁止进程发送广播消息的能力。只有数据报套接口支持广播,并且还必须是在支持广播消息的网络上(例如以太网、令牌网)。不能在一个点对点链路上进行广播。

SO_DEBUG套接口选项:

此选项仅由TCP支持,当该选项使能时,内核对TCP在此套接口所 发送和接收的所有分组跟踪详细信息。这些信息保存在内核的环形缓冲区中,可由程序trpt来进行检查。

SO_DONTROUTE套接口选项:

此选项规定发出的分组将旁路底层协议的正常路由机制。

SO_ERROR套接口选项:

当套接口上发生错误时,内核可立即以下面两种方式通知进程:

(1)如果进程阻塞于对些套接口的select调用 ,则无论是检查可读条件还是可写条件,select均返回并设置其中一个或所有两个条件

(2)如果进程使用信号驱动I/O模型,则给进程或进程组生成信号SIGIO

进程然后可以通过获取SO_ERROR套接口选项来得到so_error的值。由getsockopt返回的整数值就是些套接口的待处理错误。当进程调用read且没有数据返回时,如果so_error为非0,则read返回-1且errno设为so_error的值,接着so_error的值被复位为0.如果套接口有数据在排队,则read返回那些数据而不是返回错误条件。如果在进程调用 write时so_error为非0值,则write返回-1且errno设为so_error的值,so_error也被复位为0.

SO_KEEPALIVE套接口选项:

给一个TCP套接口设置保持存活选项后,如果2小时 内在此套接口的任一方向没有数据交换,TCP会自动给对方发送一个保持存活探测分节。这是一个对方必须响应的TCP分节,它会导致以下三种情况:

(1)对方以期望的ACK响应,应用进程得不到通知。又过仍无动静的2小时 后,TCP将发出另一个探测分节。

(2)对方以RST响应,告诉本地TCP,对方已崩溃且已重新启动。套接口的待处理错误被置为ECONNRESET,套接口本身则被关闭。

(3)对方对保持存活探测分节无任何反应。

SO_LINGER套接口选项:

此选项指定函数close对面向连接的协议如何操作(TCP)。缺省操作是close立即返回,但如果有数据残留在套接口发送缓冲区中,系统将试着将这些数据发送给对方。

SO_LINGER套接口选项使我们可以改变这个缺省设置。此选项要求用户进程与内核间传递如下结构,它在头文件<sys/socket.h>中定义:

#include <sys/socket.h>
struct linger
{int l_onoff;/*0 = off, nonzero = on*/int l_linger; /*linger time seconds*/
};

对setsockopt的调用将依两个结构成员的值导致下列三种情况的某一种:

1、如果l_onoff为0, 则选项关闭,l_linger的值被忽略,且close立即返回

2、如果l_onoff为非0值且l_linger为0,则当套接口关闭时,TCP将丢弃保留在套接口发送缓冲区中的任何数据并发送一个RST给对方,而不是通常的四分组连接终止序列。

3、如果l_onoff为非0值且l_linger也为非0值,那么当套接口关闭时内核将拖延一段时间,也就是说,如果套接口发送缓冲区仍留有数据,进程将处于睡眠状态,一直到(1)所有数据都已发送完且均被对方确认或(2)延滞时间到。如果套接口被设置为非阻塞,它将不等待close完成,即使延滞时间为非0也是如此。当使用SO_LINGER选项的这个的特性时,应用进程检查close的返回值是非常重要的,因为,如果在数据发送完并被确认前延滞时间到的话,close将返回EWOULDBLOCK错误且套接口发送缓冲区中的任何数据都丢失。

SO_OOBINLINE套接口选项:

当此选项打开时,带外数据将被保留在正常的输入队列中。当发生这种情况时,接收函数的MSG_OOB标志不能用来读带外数据。

SO_RCVBUF和SO_SNDBUF套接口选项:

当设置TCP套接口接收缓冲区的大小时,函数调用 的顺序是很重要的,这是因为TCP的窗口规模选项是在建立连接时用SYN与对方互换得到的。对于客户端,这意味着SO_RCVBUF选项必须在调用 connect之前设置,对于服务器,在调用listen之前设置这个选项

SO_RCVLOWAT和SO_SNDLOWAT套接口选项:

每个套接口也都 有一个接收低潮限度和一个发送低潮限度。它们是函数select使用的。接收低潮限度是让select返回“可读”而在套接口接收缓冲区必须有的数据的总量。对于TCP或UDP套接口,缺省为1.发送低潮限度是让select返回“可写”而在套接口发送缓冲区中必须有的可用空间,对于TCP,缺省为2048

SO_RCVTIMEO和SO_SNDTIMEO套接口选项:
     这两个选项使得我们可以给套接口设置一个接收和发送超时。缺省时两个超时都是禁止的。

接收超时影响五个输入函数:read,readv, recv, recvfrom和recvmsg。发送超时影响五个输出函数:write,writev, send, sendto和sendmsg

SO_REUSEADDR套接口选项:

1、SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知的端口,即使以前建立的将此端口用作它们的本地端口的连接仍存在

2、SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。

3、SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。

4、SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许些IP和端口捆绑到另一个套接口上,这个特性仅在支持多播的系统中才有。

SO_TYPE套接口选项:

这个选项返回套接口的类型,返回的整数值是一个诸如SOCK_STREAM和SOCK_DGRAM这样的值

SO_USELOOPBACK套接口选项:

此选项仅用于路由域(AF_ROUTE)的套接口,它对这些套接口的缺省设置为打开

网络编程学习笔记(基本套接口选项)相关推荐

  1. 网络编程学习笔记(TCP套接口选项)

    其套接口级别为IPPROTO_TCP TCP_KEEPALIVE: 指定TCP开始发送保持存活探测分节前以秒为单位的连接空闲时间.此选项在SO_KEEPALIVE套接口选项打开时才有效 TCP_MAX ...

  2. 网络编程学习笔记(IPv4套接口选项)

    这些选项级别为IPPROTO_IP IP_HDRINCL: 如果此选项给一个原始IP套接口,必须为所有发判定以此原始套接口上的数据报构造自己的IP头部.一般情况下,内核为发送到原始套接口上的数据报构造 ...

  3. UNIX网络编程读书笔记:套接口选项

    概述 有很多方法来获取和设置影响套接口的选项: getsockopt和setsockopt函数 fcntl函数 ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接口. ...

  4. UNIX网络编程读书笔记:套接口地址结构

    前言 大多数套接口函数都需要一个指向套接口地址结构的指针作为参数.每个协议族都定义它自己的套接口地址结构.这些结构的名字均以"sockaddr_"开头,并以对应每个协议族的唯一后缀 ...

  5. 网络编程学习笔记(Unix域套接口地址)

    Unix域协议并不是一个实际的协议族,它只是在现一台主机上进行客户-服务通信时,使用与在不同主机上的客户和服务器间通信时相同的API的一种方法 ,当客户和服务器在同一台主机上时,Unix域协议 是IP ...

  6. 2021版!万字UNIX网络编程学习笔记(套接字篇)

    目录 1.一个简单的时间获取服务器的程序 2.套接字篇 2.1 套接字简介 2.2 套接字中常用的函数 2.3 基本TCP套接字编程 2.3.1.socket函数 2.3.2 connect函数 2. ...

  7. 网络编程学习笔记(RES_USE_INET6解析器选项)

    通过这个选项来通知解析器让gethostbyname返回IPv6地址而不是IPv4地址 1.应用 程序本身可以设置此选项,首先调用解析器的res_init函数,然后打开该选项: #include &l ...

  8. 15Java网络编程学习笔记

    Java网络编程学习笔记 文章目录 1 网络基础 1.1 网络通信 1.2 网络 1.3 IP地址 1.5 域名 1.6 端口号 1.7 网络通信协议 1.8 TCP协议 1.9 UDP协议 2 In ...

  9. [Linux网络编程学习笔记]索引

    一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...

最新文章

  1. Boost:aligned alloc对齐分配的测试程序
  2. drawable文件怎么添加图片_怎么给PDF文件添加书签
  3. Python打包exe后报错:Failed to execute script xxxx问题的解决办法
  4. qml入门学习(五):alias
  5. keras文件存放的目录
  6. 订单可视化(智能制造、流程再造、企业信息化) 第七篇 经营班子掌舵,业务与开发分离,走向成功必备条件...
  7. install opencv on mac and use it in xcode
  8. 管理感情:精力有限,要么干活,要么内斗
  9. 谁“杀死”了杀毒软件
  10. cs61b实验记录(一)Lab2、Lab3
  11. HTML实现百度换肤
  12. h5活动是什么意思_H5是什么,怎么用H5做运营活动?
  13. 十分钟开发出神经网络五子棋
  14. wx is not defined
  15. ArcGIS、Super、MapMapInfo…
  16. 卡硬工具箱说系统服务器,卡硬工具箱有什么用处功能 卡硬工具箱检测电脑配置教程...
  17. 华为Taurus云原生数据库论文分析
  18. Windows Mobile中使用WinCE驱动调试助手的小技巧
  19. 编译原理第五章课程总结
  20. 【NLP】用python实现文本转语音处理

热门文章

  1. 未来CPU内核将更简单!
  2. 便携式不锈钢管道焊接机器人_不锈钢管道焊接工艺
  3. python从入门到精通pdf百度云下载-跟老齐学Python从入门到精通 电子版(pdf格式)...
  4. python可以自学吗需要什么基础-python自学行吗?给编程初学者零基础入门的建议...
  5. python小课骗局-Python小课怎么样啊?
  6. python编写爬虫的步骤-零基础写python爬虫之爬虫编写全记录
  7. python.freelycode.com-最难搞的python“反面”代码
  8. python实现文件下载-python实现文件上传下载
  9. 学会python爬虫怎么赚钱-转行学Python有前途吗?Python爬虫怎么赚钱?
  10. php和python web开发-初入Web开发,php、python和ruby应该学哪个?