TCP套接字选项SO_LINGER与TCP_LINGER2】的更多相关文章

概述 本文对两个LINGER相关的套接字选项进行源码层面的分析,以更明确其各自的作用和区别: man page SO_LINGER,该选项是socket层面的选项,通过struct linger结构来设置信息,如果启用该选项,那么使用close()和shutdown()(注意:虽然manpage这么写,但是shutdown内核代码流程中并未用到该选项)关闭socket,将会等待发送队列中的数据发送完成或者等待超时:如果不启用该选项,那么调用会立即返回,关闭任务在后台完成:注意:如果是调用exit…
1. 套接字选项函数原型: #include <sys/socket.h> int getsockopt(int sockfd, int level, int optname, void *optval, socklen_t *optlen); int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen); ret-成功返回0 失败返回- 2. 通用套接字选项: (1) SO_B…
说明 前面从stackoverflow上找了一篇讲这两个选项的文章,文章内容很长,读到最后对Linux中的这两个选项还是有些迷茫,所以重新写一篇文章来做一个总结: 本文只总结TCP单播部分,并且只讨论该选项的bind()系统调用部分,UDP,组播,开启选项之后数据包的调度等不做讨论: man手册中对这两个套接字的描述 SO_REUSEADDR SO_REUSEADDR Indicates that the rules used ) call should allow reuse of local…
说明 本文下面内容基本上是截取自stackoverflow,针对这两个选项,在另外一篇文章中做了总结,请移步<Linux TCP套接字选项 之 SO_REUSEADDR && SO_REUSEPORT> 原文部分翻译 基本知识点 TCP/UDP连接是由一个五元组(如下)标识的,不允许存在多个连接具有完全相同的五元组,否则无法对它们进行区分:{<protocol>, <src addr>, <src port>, <dest addr&g…
int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);  //设置套接字选项 回射服务器编写,服务器关闭后处于TIME_WAIT状态,过一段时间才可以绑定刚才的端口.在绑定服务器之前尽可能调用setsockopt来设置REUSEADDR套接字选项,使用REUSEADDR选项可以使得不必等待TIME_WAIT状态消失就可以重启服务器 服务器处理多并发,客户端短连接过来就创建子…
1. SO_BROADCAST 套接字选项 本选项开启或禁止进程发送广播消息的能力.只有数据报套接字支持广播,并且还必须是在支持广播消息的网络上(例如以太网,令牌环网等).我们不可能在点对点链路上进行广播,也不可能在基于连接的传输协议(例如TCP和SCTP)之上进行广播. 2. SO_DEBUG 套接字选项 本选项仅由TCP支持.当给一个TCP套接字开启本选项时,内核将为TCP在该套接字发送和接受的所有分组保留详细跟踪信息.这些信息保存在内核的某个环形缓冲区中,并可使用trpt程序进行检查. 3…
#include <sys/socket.h> int setsockopt( int socket, int level, int option_name,const void *option_value, size_t option_len); 第一个参数socket是套接字描述符. 第二个参数level是被设置的选项的级别,如果想要在套接字级别上设置选项,就必须把level设置为SOL_SOCKET. 第三个参数 option_name指定准备设置的选项,option_name可以有哪些…
如今能够改进客户程序,使它能够连接到不论什么有名字的主机,这次不是连接到演示样例server,而是连接到一个标准服务,这样就能够演示port号的提取操作了. 大多数UNIX和一些linux系统都有一项标准服务daytime,它提供系统的日期和时间.客户能够连接到这个服务来查看server的当前日期和时间.以下就是完毕这一工作的客户程序getdate.c 编敲代码getdate.c /*********************************************************…
套接字机制提供两个套接字选项接口来控制套接字的行为.一个接口用来设置选项,另一个接口允许查询一个选项的状态.可以获取或设置的三种选项: (1)通用选项,工作在所有套接字类型上. (2)在套接字层次管理的选项,但是依赖于下层协议的支持. (3)特定与某协议的选项,为每个协议所独有. Single UNIX Specification仅定义了套接字层的选项(上述三种选项中的前两种选项). 可以采用setsockopt函数来设置套接字选项. #include <sys/socket.h> int s…
http://www.educity.cn/linux/1241288.html 有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项. int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen) int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t *optlen)…