setsockopt之 TCP_KEEPIDLE/TCP_KEEPINTVL/TCP_KEEPCNT /*检测网线非法断开*/    setsockopt(iSockFd, SOL_SOCKET, SO_KEEPALIVE, (void*)&KeepAlive,sizeof(KeepAlive));    setsockopt(iSockFd, SOL_TCP, TCP_KEEPIDLE, (void*)&KeepIdle,sizeof(KeepIdle));    setsockopt(…
IO多路复用之epoll总结 ↑2013年8月21日11:49:44 EPOLL下的accept(不错的blog) 关于TCP封包.粘包.半包 linux内核TCP相关参数解释 ↑2013年8月14日0:30:00 使用负载均衡技术建设高负载的网络站点 LVS-DR工作原理图文详解 LVS(Windows-DR) [C语言](*p)++ 与 *p++ 与 ++*p 拨开一团迷雾 实现无锁的栈与队列(3) RedRabbit基于BrokerPattern构建服务器 redis/ae redis源码…
[转]一个基于完成端口的TCP Server Framework,浅析IOCP http://www.cppblog.com/adapterofcoms/archive/2010/06/26/118781.aspx   如果你不投递(POST)Overlapped I/O,那么I/O Completion Ports 只能为你提供一个Queue.     CreateIoCompletionPort的NumberOfConcurrentThreads:1.只有当第二个参数ExistingComp…
http://www.cnblogs.com/wickedboy237/archive/2013/05/12/3074362.html 1:tcp和udp的区别2:流量控制和拥塞控制的实现机制3:滑动窗口的实现机制4:多线程如何同步.5:进程间通讯的方式有哪些,各有什么优缺点6:tcp连接建立的时候3次握手的具体过程,以及其中的每一步是为什么7:tcp断开连接的具体过程,其中每一步是为什么那么做8:tcp建立连接和断开连接的各种过程中的状态转换细节9:epool与select的区别10:epoo…
closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket BOOL bReuseaddr=TRUE; setsockopt (s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 如果要已经处于连接状态的soket在调用closesocket后强制关闭,不经历TIME_WAIT的过程 BOOL bDontLinger = FALSE; setsockopt (s,SOL_SO…
最近需要写一个linux下的通信程序, 通信模块用的是Qt的QTcpSocket. 最后程序需要增加一个断网检测, 在windows下调试没问题, 拔网线, 断网口都能马上检测到, 但到了部署到linux下就需要等10多分钟才能得到断网的信号. 调试+google后, 定位问题应该不是Qt的问题, 而是windows和linux下对tcp超时的设置不同导致的, 也找到一些解决方案, 大致可以归纳为两类: 直接修改系统参数的(链接) echo "6" > /proc/sys/net…
应用层对于每个socket采用如下函数来开启 keepalive机制,其参数将采用系统上述配置. setsockopt(rs, SOL_SOCKET, SO_KEEPALIVE, (void *)&keepAlive, sizeof(keepAlive)); 注意:keepalive是一个TCP协议包,并不是应用层数据包,意即通过recv等函数从应用层上是无法获得该协议包.可通过抓包工具来看. ===================================================…
TCP连接探测中的Keepalive和心跳包 tcp keepalive 心跳 保活 Linuxtcp心跳keepalive保活1. TCP保活的必要性 1) 很多防火墙等对于空闲socket自动关闭 2) 对于非正常断开, 服务器并不能检测到. 为了回收资源, 必须提供一种检测机制. 2. 导致TCP断连的因素 如果网络正常, socket也通过close操作来进行优雅的关闭, 那么一切完美. 可是有很多情况, 比如网线故障, 客户端一侧突然断电或者崩溃等等, 这些情况server并不能正常检…
一. read/write的语义:为什么会阻塞? 先从write说起: #include <unistd.h>ssize_t write(int fd, const void *buf, size_t count); 首先,write成功返回,只是buf中的数据被复制到了kernel中的TCP发送缓冲区.至于数据什么时候被发往网络,什么时候被对方主机接收,什么时候被对方进程读取,系统调用层面不会给予任何保证和通知. write在什么情况下会阻塞?当kernel的该socket的发送缓冲区已满时…
上一篇中介绍了TCP数据传输中涉及的一些基本知识点.本文让我们看看TCP中的4种定时器. TCP定时器 对于每个TCP连接,TCP管理4个不同的定时器,下面看看对4种定时器的简单介绍. 重传定时器使用于当希望收到另一端的确认. 该定时器是用来决定超时和重传的. 由于网络环境的易变性,该定时器时间长度肯定不是固定值:该定时器时间长度的设置依据是RTT(Round Trip Time),根据网络环境的变化,TCP会根据这些变化并相应地改变超时时间. 坚持定时器(persist)使窗口大小信息保持不断…