- 博客(8)
- 资源 (9)
- 收藏
- 关注
原创 服务器中循环索引的作用(socket)
在进行服务器开发时,有很多需要注意的地方:1、socket索引对应一个客户端,这是很常用的做法,但是如果此socket出现异常,服务端关闭了 此socket,而另一个客户端又连接进来,此时分配的socket句柄很有可能跟刚才的句柄一样 这样便会导致一些很难调试的异常发生,预防的方法是,除了用socket对应一个客户端,还要 用一个循环索引index
2015-08-23 15:04:59 835
转载 Tcp通信中服务器处理客户端意外断开 / 10054
所谓意外断开,是客户端(多指支持3G的移动设备)并没有正常关闭socket,双方并未按照协议上的四次挥手去断开连接,一般的处理办法都是利用保活机制。而保活机制分又可以让底层实现也可自己实现。一、双方拟定心跳(自实现)一般由客户端发送心跳包,服务端并不回应心跳,只是定时轮询判断一下与上次的时间间隔是否超时(超时时间自己设定)。服务器并不主动发送是不想增添服务器的通信量,减少压力。
2015-08-15 18:38:07 10568
转载 socket关闭 四次握手
主要部分,四次握手:断开连接其实从我的角度看不区分客户端和服务器端,任何一方都可以调用close(or closesocket)之类的函数开始主动终止一个连接。这里先暂时说正常情况。当调用close函数断开一个连接时,主动断开的一方发送FIN(finish报文给对方。有了之前的经验,我想你应该明白我说的FIN报文时什么东西。也就是一个设置了FIN标志位的报文段。FIN报文也可能
2015-08-15 18:29:11 3719
转载 深入浅出TCP协议的2MSL TIME_WAIT状态
TCP状态迁移路线图:2MSL TIME_WAIT状态存在的理由:TIME_WAIT状态的存在有两个理由:(1)让4次握手关闭流程更加可靠;4次握手的最后一个ACK是是由主动关闭方发送出去的,若这个ACK丢失,被动关闭方会再次发一个FIN过来。若主动关闭方能够保持一个2MSL的TIME_WAIT状态,则有更大的机会让丢失的ACK被再次发送
2015-08-14 15:53:03 403
原创 windbg解决线程死锁
1、打开将要被检测的软件A,同时打开windbg2、windbg,File->attach to process ,附加到进程A3、F5运行或DEBUG->GO4、等待进程A进入死锁状态,然后DEBUG->Break,在下面的输入栏中输入 ~*kb,然后查看各线程信息,分析死锁原因
2015-08-14 09:56:35 5011 2
原创 C++ 锁,socket死锁
我们常常对需要多线程共同访问的资源进行加锁,但当在同一个线程中时,一个锁还没离开之前,还可以加一道锁。。。例: CRITICAL_SECTION cs;InitializeCriticalSection(&cs);EnterCriticalSection(&cs);EnterCriticalSection(&cs);
2015-08-07 17:07:28 1150
原创 C++ 头文件重复包含
当头文件重复包含时,常常会遇到编译不过的情况,这时,只需要预先定义一下某变量或类即可:例://a.h#include "b.h"class CTestA{public: CTestB m_b; //error}//b.h#include "a.h"class CTestB {public
2015-08-07 09:54:27 605
转载 IOCP中在WSASend以及WSARecv的时候出现WSA_IO_PENDING情况的说明
原文链接:http://www.xixis.net/doserver.net//read.php/2063.htm 应该是windows网络编程第二版里面提到过。现在整理一下。1:在IOCP中投递WSASend返回WSA_IO_PENDING的时候,表示异步投递已经成功,但是稍后发送才会完成。这其中涉及到了三个缓冲区。网卡缓冲区,TCP/IP层缓冲区,程序缓冲区。
2015-08-05 11:28:52 675
golang调试程序dlv.exe(delve)
2021-04-17
日本人 发明的胡牌算法,比普通的拆解法更好
2018-06-29
windows下C++实现的HTTP web 服务器
2017-10-12
多处理器编程的艺术
2016-05-23
socket select及IOCP模型的实现
2015-04-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人