iocp
Muzzik
动动你的金手指点个赞吧!
展开
-
应用程序没有调用 WSAStartup,或者 WSAStartup 失败。一次奇怪的错误
在release环境下,我的代码原本是这样:assert(WSAStartup(MAKEWORD(2, 2), &wsa) == 0);莫名其妙的出现的这个错误,结果我认真看了几次,发现vs直接跳过了这个函数的执行, 当时就傻眼了,知道release会优化,但是这样太变态了吧,assert断言内的函数语句不会执行。然后我改回了下面这样就好了int re = WSAStartup(MAKEWORD(2, 2), &wsa);if (re) { //错误处理}...原创 2020-06-07 11:06:29 · 5440 阅读 · 0 评论 -
关于AcceptEx函数
AcceptEx函数的第一个参数listen_socket和第二个参数accept_sock不能相同。并且第一个参数listen_socket必须开启监听,否则会返回10022错误。AcceptEx函数的缓冲区如果设为0字节,那么每次发到客户端将延迟10ms左右,底层原因。。如果收到连接请求,GetQueuedCompletionStatus函数的lpCompletionKey参数将是调用CreateIoCompletionPort绑定listen_socket到完成端口的第三个参数。...原创 2020-06-01 23:22:33 · 823 阅读 · 0 评论 -
WSASend体会以及WSAENOBUFS错误思路
1. 无论投递多大的缓冲区它都是立即返回2. 返回成功只是表示将数据拷贝到了发送缓冲区3.GetQueuedCompletionStatus返回成功只表示发送成功,并不代表对方成功接收到数据4.WSAWaitForMultipleEvents 和 WSAGetOverlappedResult 同 3 类似个人结论:网上的宣称投递0字节WSASend并没有什么卵用。WSASend返回WSAENOBUFS不用理会,前提是你必须把发送缓冲列表里的数据放在GetQueuedCompletionStatu..原创 2020-05-10 05:27:58 · 746 阅读 · 0 评论 -
C++ IOCP问题备注
【1236错误】情况如下: 1.client连接server 2.client发送消息到server 3.client使用closesocket(sock); 4.server接收到关闭socket消息(lpNumberOfBytesTransferred为0, 注意:如果客户端发送的是空消息同样为零)然后使用closesocket函数关闭了这个客户端的s...原创 2020-04-30 14:29:08 · 566 阅读 · 0 评论 -
单临界区管理和多临界区管理的效率对比
测试代码:struct test1 { int value; CRITICAL_SECTION _critical; //临界区 test1() : value(0) { // 初始化临界区 InitializeCriticalSection(&_critical); } ~test1() { // 释放临界区 DeleteCriticalSectio...原创 2020-04-26 01:56:13 · 219 阅读 · 0 评论