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

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)的套接口,它对这些套接口的缺省设置为打开

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值