服务器
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 · 5437 阅读 · 0 评论 -
C++ 死锁检测
······不想写注解了,认真点的人看代码和注释都能懂。第一版,还没优化性能。另外建议不要将死锁处理的代码镶入release版本之中,会影响性能。最好的办法是用来调试。在debug时先将出现死锁的地方排除。然后发布时去掉这个死锁检测系统,可以利用宏。······源码及使用代码都在下面了,命名和函数体都可以按照自己习惯进行重构。希望能帮到大家。如果觉得还行那就给个赞吧。struct test { CRITICAL_SECTION cri; test() { InitializeCriticalS原创 2020-06-02 21:04:47 · 2317 阅读 · 0 评论 -
关于AcceptEx函数
AcceptEx函数的第一个参数listen_socket和第二个参数accept_sock不能相同。并且第一个参数listen_socket必须开启监听,否则会返回10022错误。AcceptEx函数的缓冲区如果设为0字节,那么每次发到客户端将延迟10ms左右,底层原因。。如果收到连接请求,GetQueuedCompletionStatus函数的lpCompletionKey参数将是调用CreateIoCompletionPort绑定listen_socket到完成端口的第三个参数。...原创 2020-06-01 23:22:33 · 822 阅读 · 0 评论 -
C++判断是否为有效IP地址
std::string ip("199.199.199.199");std::regex check_ip("(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])[.](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])[.](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[1-9])[.](25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-原创 2020-06-01 06:06:28 · 1311 阅读 · 0 评论 -
Socket端口复用和非阻塞套接字
BOOL optval = TRUE;// 端口复用if (SOCKET_ERROR == setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char*)&optval, sizeof(optval))) {}// 非阻塞套接字if (SOCKET_ERROR == ioctlsocket(sock, FIONBIO, (u_long ...原创 2020-05-03 05:19:21 · 163 阅读 · 0 评论