目录 SO_REUSEADDR time-wait SO_REUSEPORT SO_REUSEADDR 一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用 server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项 TCP,先调用close()的一方会进入TIME_WAIT状态 SO_REUSEADDR提…
说明 本文下面内容基本上是截取自stackoverflow,针对这两个选项,在另外一篇文章中做了总结,请移步<Linux TCP套接字选项 之 SO_REUSEADDR && SO_REUSEPORT> 原文部分翻译 基本知识点 TCP/UDP连接是由一个五元组(如下)标识的,不允许存在多个连接具有完全相同的五元组,否则无法对它们进行区分:{<protocol>, <src addr>, <src port>, <dest addr&g…
说明 前面从stackoverflow上找了一篇讲这两个选项的文章,文章内容很长,读到最后对Linux中的这两个选项还是有些迷茫,所以重新写一篇文章来做一个总结: 本文只总结TCP单播部分,并且只讨论该选项的bind()系统调用部分,UDP,组播,开启选项之后数据包的调度等不做讨论: man手册中对这两个套接字的描述 SO_REUSEADDR SO_REUSEADDR Indicates that the rules used ) call should allow reuse of local…
在java网络编程Socket通信中,通常会遇到以下异常情况: 第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行new ServerSocket(port)(port是一个0,65536的整型值)操作时.异常的原因是以为与port一样的一个端口已经被启动,并进行监听.此时用netstat -an命令,可以看到一个Listending状态的端口.只需要找一个没有被占用的端口就能解决该问题了.  …
最近程序 出现 几次 Socket 错误, 为了便于 差错.. 搜了一些 贴在这里.. 出现网络联机错误Socket error #11001表示您的计算机无法连上服务器,请检查您的Proxy设定以及Proxy相关账号,或暂时取消您防毒软件的「个人防火墙」. 出现网络联机错误Socket error #11004应该是网络联机状态问题,请用户检查网络联机是否正常. 出现网络联机错误Socket error #10060 Connection Timed Out表示您与服务器发生联机逾时错误,请检…
socket 常见方法: 补充说明:what is file descriptor? 文件描述符是什么? 参考(http://stackoverflow.com/questions/8191905/whats-is-difference-between-file-descriptor-and-file-pointer) File pointer: It is high level interface Passed to fread() and fwrite() functions Include…
1. docker run创建容器常见选项 1.1 创建容器 选项 描述 -i,-interactive 交互式 -t,-tty 分配一个伪终端 -d,-detach 运行容器到后台 -e,-env 设置环境变量 -p(小写),-publish list 发布容器端口到主机 -P(大写),-publish -all 发布容器所有EXPOSE的端口到宿主机随机端口 --name string 指定容器名称 -h,-hostname 指定容器主机名 -ip string 指定容器IP,只能用于自定义…
1.一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用. SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用.server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项.TCP,先调用close()的一方会进入TIME_WAIT状态 2.SO_REUSEADDR和SO_REUSEPORT SO_REUSEADDR提供如下四个功能: 当有一个有相同本地地址和…
在网络编程中,Socket/ServerSocket有一些选项用来自定义一些行为,现在分享一下.     Socket选项 1.TCP_NODELAY 在Socket发送数据时,默认情况下,数据会先进入缓冲区,等缓冲区满了再发送出去,意图是为了通过减少传输数据的次数,以此来提高通信效率. 但是,对于一些需要即时发送,即时响应的场景并不合适,比如网络游戏.客户端因为采用的默认行为,会等到缓冲区满了后才发送数据,服务端的响应相应也会变慢,导致整个游戏运行起来不流畅. 这时,就要开启TCP_NODEL…
网友vmstat多次提出了这个问题:SO_REUSEADDR有什么用处和怎么使用.而且很多网友在编写网络程序时也会遇到这个问题.所以特意写了这么一篇文章,希望能够解答一些人的疑难. 其实这个问题在Richard Stevens的<Unix网络编程指南>卷一里有很详细的解答(中文版P166-168页).这里我只是写几个基本的例子来验证这个问题.首先声明一个问题:当两个socket的address和port相冲突,而你又想重用地址和端口,则旧的socket和新的socket都要已经被设置了SO_R…
功能描述 获取或者设置与某个套接字关联的选 项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层.当操作套接字选项时,选项位于的层和选项的名称必须给出.为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET.为了操作其它层的选项,控制选项的合适协议号必须给出.例如,为了表示一个选项由TCP协议解析,层应该设定为协议号TCP. 用法 #include <sys/socket.h> int getsockopt(int sock, int level, int optname, …
一.简介 本文介绍 Socket 连接常见错误.   二.常见错误 1)ECONNABORTED 描述:"software caused connection abort",即"软件引起的连接中止" 原因:当服务和客户进程在完成用于 TCP 连接的"三次握手"后,客户 TCP 发送了一个 RST (复位)   2)ECONNRESET 描述:"connection reset by peer",即"对方复位连接&qu…
好多次接触到SO_LINGER选项,但总是忘了这是干什么用的.现在整理一下,我才明白这个参数是用来设定“SOCKET在CLOSE时候是否等待缓冲区发送完成”这个特性的.下面是一些详细的说明. setsockopt 设置 SO_LINGER 选项 此选项指定函数close对面向连接的协议如何操作(如TCP).内核缺省close操作是立即返回,如果有数据残留在套接口缓冲区中则系统将试着将这些数据发送给对方. SO_LINGER选项用来改变此缺省设置.使用如下结构: struct linger { i…
第1个异常是 java.net.BindException:Address already in use: JVM_Bind. 该异常发生在服务器端进行newServerSocket(port)(port是一个0,65536的整型值)操作时.异常的原因是以为与port一样的一个端口已经被启动,并进行监听.此时用netstat–an命令,可以看到一个Listending状态的端口.只需要找一个没有被占用的端口就能解决这个问题. 使用Java JDK中Java.net包控制UDP协议 通过Java.…
一.昨日内容回顾 1.arp协议含义 2.子网,子网掩码 3.两台电脑在网络中怎么通信的? 4.tcp和udp socket编码 5.tcp和udp协议的区别 6.tcp三次握手和四次挥手,syn洪攻击,大量time-wait状态等 二.今日内容 1.认识下socket中的一些常见方法 服务器套接字函数 s.bind() s.listen(n) # 至少可以同时连接2个,至多n个 s.accept() 客户端套接字函数 s.connect() s.connect_ex() 公共用途的套接字函数…
一.TCP选项概述 在前面介绍TCP头的时候,我们说过tcp基本头下面可以带有tcp选项,其中有些选项只能在连接过程中随着SYN包发送,有些可以延后.下表汇总了一些tcp选项 其中我标记为红色的部分是常见的TCP选项,我们仅针对这些红色的TCP选项进行介绍(主要是非红色的我也不太了解~~~),另外RFC1323已经被RFC7323取代,这里给出的是TCP选项原始定义的RFC 按照RFC793规定,一个TCP选项只需要单字节对齐,但是在实现上一般是两字节对齐或者会通过NOP选项实现四字节对齐,例如…
转自:http://zhangjunxin520.blog.163.com/blog/static/305037032011721102857609/ 在IP头中,有一Type-of-Service字段,该字段描述了IP包的 优先级和QoS选项,使用IP_TOS可以来设定该字段的值:   使用setsockopt设置IP_TOS代码如下: unsigned char  service_type = 0xe0 | IPTOS_LOWDELAY | IPTOS_RELIABILITY; if(set…
rpm是一个功能十分强大的软件包管理系统,它使得在Linux下安装.升级和删除软件包的工作变的容易.并且具有查询.验证软件包的功能. 1)安装选项 命令格式:rpm {-i|--install} [install-options] PACKAGE_FILE ... 详细选项 -h (or -hash)安装时输出hash记号(#) --test 只对安装进行测试,并不实际安装 --percent 以百分比的形式输出安装的进度 --nodeps:忽略依赖关系 --replacepkgs:重新安装 -…
http://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t SO_REUSEADDR socketA socketB Result --------------------------------------------------------------------- ON/OFF 192.168.0.1:21…
1 -hda file -hdb file.-hdc file.-hdd file 把文件当成hard disk 0.hard disk 1.hard disk 2和hard disk 3. 2 -append cmdline 将cmdline作为kernel command line,所谓kernel command line就是在kernel启动的时候,用cmdline对内核进行配置. 比如"root=/dev/hda",将/dev/hda设置成根文件系统.…
文章导航 Redis源码系列的初衷,是帮助我们更好地理解Redis,更懂Redis,而怎么才能懂,光看是不够的,建议跟着下面的这一篇,把环境搭建起来,后续可以自己阅读源码,或者跟着我这边一起阅读.由于我用c也是好几年以前了,些许错误在所难免,希望读者能不吝指出. 曹工说Redis源码(1)-- redis debug环境搭建,使用clion,达到和调试java一样的效果 曹工说Redis源码(2)-- redis server 启动过程解析及简单c语言基础知识补充 曹工说Redis源码(3)--…
提高服务端性能的几个socket选项 在之前的一篇文章中,作者在配置了SO_REUSEPORT选项之后,使得应用的性能提高了数十倍.现在介绍socket选项中如下几个可以提升服务端性能的选项: SO_REUSEADDR SO_REUSEPORT SO_ATTACH_REUSEPORT_CBPF/EBPF 验证环境:OS:centos 7.8:内核:5.9.0-1.el7.elrepo.x86_64 默认行为 TCP/UDP连接主要靠五元组来区分一条链接.只要五元组不同,则视为不同的连接. {pr…
说明:该文章中部分代码未能完全理解透彻,可能对您造成误解,请慎读: 并建议您先阅读本博另外一篇文章:<Linux TCP套接字选项 之 SO_REUSEADDR && SO_REUSEPORT> 另:该文章将会持续更新改进: TCP的接口绑定通过函数inet_csk_get_port函数执行,其中包含了未设置端口号自动分配的情况,设置了地址重用标记(SO_REUSEADDR)和设置了端口重用(SO_REUSEPORT)选项的处理:检查成功则控制块节点加入到绑定接口hash中对应…
from http://blog.csdn.net/feiyinzilgd/article/details/5894300 Linux网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR. SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回. SO_L…
文章内容来源于stackoverflow上的回答,写的很详细http://stackoverflow.com/questions/14388706/socket-options-so-reuseaddr-and-so-reuseport-how-do-they-differ-do-they-mean-t      虽然不同的系统上socket的实现方式有一些差异,但都来源于对BSD socket的实现,因此在讨论其它系统之前了解BSD socket的实现是非常有益的.首先我们需要了解一些基本知识…
大部分内容来自stackoverflow上的回答:Socket options SO_REUSEADDR and SO_REUSEPORT, how do they differ? Do they mean the same across all major operating systems?     由于现有的操作系统上的socket都来自BSD socket,且每种操作系统都后续进行了相应的改变.下面先说 BSD socket中的行为,在最后一节单独介绍linux系统下的socket特定行…
前些天,与另外一个项目组的同事聊天的时候,谈到他遇到的一个有意思的BUG.在window上启动服务器,然后客户端连接的时候收到一些奇怪的消息,查证了,原来是他自己的另一个工具也在相同的地址上监听,客户端连接到了后面这个工具程序上.我问他,是相同的IP和端口?他说是的,因为服务器代码和工具程序都设置了SO_REUSEADDR这个socket选项,所以可以在同样的地址上监听. 可是,在我的认知里面, SO_REUSEADDR这个选项并不是说让两个程序在相同地址(相同的IP 和 端口)上监听,而是说可…
freebsd与linux下bind系统调用小结:    只考虑AF_INET的情况(同一端口指ip地址与端口号都相同) freebsd支持SO_REUSEPORT和SO_REUSEADDR选项,而linux只支持SO_REUSEADDR选项. freebsd下,使用SO_REUSEPORT选项,两个tcp的socket可以绑定同一个端口:同样,使用SO_REUSEPORT选项,两个udp的socket可以绑定同一个端口. linux下,两个tcp的socket不能绑定同一个端口:而如果使用SO…
Socket的基本背景 在讨论这两个选项的区别时,我们需要知道的是BSD实现是所有socket实现的起源.基本上其他所有的系统某种程度上都参考了BSD socket实现(或者至少是其接口),然后开始了它们自己的独立发展进化.显然,BSD本身也是随着时间在不断发展变化的.所以较晚参考BSD的系统比较早参考BSD的系统多一些特性.所以理解BSD socket实现是理解其他socket实现的基石.下面我们就分析一下BSD socket实现. 在这之前,我们首先要明白如何唯一识别TCP/UDP连接.TC…
java socket中有很多参数可以选择,这篇博客的目的是沉淀出这些参数的语义和用法,供自己以后查阅. 1.java socket参数选项总览 在JDK1.6中有如下参数选项: 1 public final static int TCP_NODELAY = 0x0001; 2 3 public final static int SO_BINDADDR = 0x000F; 4 5 public final static int SO_REUSEADDR = 0x04; 6 7 public fi…