开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 626|回复: 11
收起左侧

[闲聊] ETCP 5.0一处神秘代码

[复制链接]
头像被屏蔽
结帖率:100% (4/4)
发表于 2024-7-9 21:45:34 | 显示全部楼层 |阅读模式   安徽省合肥市
在ETCP c++中源码有一处 永远无法执行的代码块 位于tcp.cpp,385行 难道这个地方有什么特别之处吗?
QQ图片20240709214403.png
结帖率:100% (1/1)

签到天数: 1 天

发表于 2024-7-9 23:51:58 | 显示全部楼层   贵州省黔南布依族苗族自治州
可能是以前的版本 哪里复制来的一块代码.
然后ctrl+v就不管了...
回复 支持 反对

使用道具 举报

结帖率:83% (10/12)

签到天数: 25 天

发表于 2024-7-9 23:38:06 | 显示全部楼层   河南省商丘市
可能是程序员们秉承着代码能跑就别动的优良传统保留下来的吧。
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:100% (4/4)
 楼主| 发表于 2024-7-9 23:24:24 | 显示全部楼层   安徽省合肥市
〞剑舞长空 发表于 2024-7-9 21:56
都m_is了,总不能线程抢占变量吧

这段代码在没有调用其他函数的时候 在m_is 判断内做了2次m_Is判断 其实没必要直接跳过就好了 应该只是代码没做优化删减
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:100% (4/4)
 楼主| 发表于 2024-7-9 23:19:33 | 显示全部楼层   安徽省合肥市
hxznhf 发表于 2024-7-9 23:16
要么写错了,要么此处的m_is一定还有其它地方会同时修改它(比如其它线程),你后面代码也没截图完整。 ...

这个方法很长的 处理了不同方式的数据
回复 支持 反对

使用道具 举报

头像被屏蔽
结帖率:100% (4/4)
 楼主| 发表于 2024-7-9 23:18:43 | 显示全部楼层   安徽省合肥市
hxznhf 发表于 2024-7-9 23:16
要么写错了,要么此处的m_is一定还有其它地方会同时修改它(比如其它线程),你后面代码也没截图完整。 ...

这是ETCP 完整的代码

[C++] 纯文本查看 复制代码
void tcp::RecvData(bool error, P_tcpstruct nop)
{
        if (error)
        {
                EnterCriticalSection(&m_cs);
                m_cnum--;
                LeaveCriticalSection(&m_cs);

                g_fun(this, nop->c_so, tcp_close, NULL, NULL, m_cnum);

                //closesockets(nop->c_so);
                //nop->c_so = INVALID_SOCKET;

                delete[]nop->buf;
                nop->buf = NULL;

                delete nop;
                nop = NULL;
                return;
        }

        if (m_Is)
        {
                nop->bufOffset += nop->cb;
                if (nop->bufOffset < nop->bufSize)
                {
                        nop->state = tcp_recv;
                        WSABUF wsabuf;
                        if (m_Is)
                        {
                                wsabuf.buf = nop->buf + nop->bufOffset;
                                wsabuf.len = nop->bufSize - nop->bufOffset;
                        }
                        else
                        {
                                wsabuf.buf = nop->buf;
                                wsabuf.len = buf_len;
                        }
                        DWORD Cb = 0;
                        DWORD Flg = 0;
                        if (WSARecv(nop->c_so, &wsabuf, 1, &Cb, &Flg, (LPWSAOVERLAPPED)nop, NULL))
                        {
                                int ercode = WSAGetLastError();
                                if (ercode == WSAEFAULT)
                                {
                                        return;
                                }
                                else if (ercode != WSA_IO_PENDING)
                                {
                                        EnterCriticalSection(&m_cs);
                                        m_cnum--;
                                        LeaveCriticalSection(&m_cs);

                                        g_fun(this, nop->c_so, tcp_close, NULL, NULL, m_cnum);

                                        delete[]nop->buf;
                                        nop->buf = NULL;

                                        delete nop;
                                        nop = NULL;
                                        return;
                                }
                        }
                        return;
                }
                DWORD size = *((DWORD*)(nop->buf));
                if (size > 65536000)
                {
                        EnterCriticalSection(&m_cs);
                        m_cnum--;
                        LeaveCriticalSection(&m_cs);

                        g_fun(this, nop->c_so, tcp_close, NULL, NULL, m_cnum);
                        //closesockets(nop->c_so);
                        //nop->c_so = INVALID_SOCKET;

                        delete[]nop->buf;
                        nop->buf = NULL;
                
                        delete nop;
                        nop = NULL;
                        return;
                }


                if (nop->bufOffset < DWORD(sizeof(DWORD)) + size)  //ÍêÕûÐÔ¼ì²â
                {
                        delete[] nop->buf;

                        nop->buf = new char[sizeof(DWORD)+size];
                        nop->bufSize = sizeof(DWORD)+size;
                        nop->bufOffset = sizeof(DWORD);
                        memcpy(nop->buf, &size, sizeof(DWORD));

                        nop->state = tcp_recv;
                        WSABUF wsabuf;
                        if (m_Is)
                        {
                                wsabuf.buf = nop->buf + nop->bufOffset;
                                wsabuf.len = nop->bufSize - nop->bufOffset;
                        }
                        else
                        {
                                wsabuf.buf = nop->buf;
                                wsabuf.len = buf_len;
                        }
                        DWORD Cb = 0;
                        DWORD Flg = 0;
                        if (WSARecv(nop->c_so, &wsabuf, 1, &Cb, &Flg, (LPWSAOVERLAPPED)nop, NULL))
                        {
                                int ercode = WSAGetLastError();
                                if (ercode == WSAEFAULT)
                                {
                                        return;
                                }
                                else if (ercode != WSA_IO_PENDING)
                                {
                                        EnterCriticalSection(&m_cs);
                                        m_cnum--;
                                        LeaveCriticalSection(&m_cs);

                                        g_fun(this, nop->c_so, tcp_close, NULL, NULL, m_cnum);

                                        delete[]nop->buf;
                                        nop->buf = NULL;

                                        delete nop;
                                        nop = NULL;
                                        return;
                                }
                        }
                        return;
                }
                if (nop->bufSize - sizeof(DWORD) > 0)
                {
                        g_fun(this, nop->c_so, tcp_recv, nop->buf + sizeof(DWORD), nop->bufSize - sizeof(DWORD), m_cnum);
                }
                delete[]nop->buf;
                nop->buf = new char[sizeof(DWORD)];
                nop->bufSize = sizeof(DWORD);
        }
        else
        {
                g_fun(this, nop->c_so, tcp_recv, nop->buf, nop->cb, m_cnum);
        }

        nop->bufOffset = 0;
        nop->state = tcp_recv;
        WSABUF wsabuf;
        if (m_Is)
        {
                wsabuf.buf = nop->buf + nop->bufOffset;
                wsabuf.len = nop->bufSize - nop->bufOffset;
        }
        else
        {
                wsabuf.buf = nop->buf;
                wsabuf.len = buf_len;
        }
        DWORD Cb = 0;
        DWORD Flg = 0;
        if (WSARecv(nop->c_so, &wsabuf, 1, &Cb, &Flg, (LPWSAOVERLAPPED)nop, NULL))
        {
                int ercode = WSAGetLastError();
                if (ercode == WSAEFAULT)
                {
                        return;
                }
                else if (ercode != WSA_IO_PENDING)
                {
                        EnterCriticalSection(&m_cs);
                        m_cnum--;
                        LeaveCriticalSection(&m_cs);

                        g_fun(this, nop->c_so, tcp_close, NULL, NULL, m_cnum);

                        //closesocket(nop->c_so);
                        //nop->c_so = INVALID_SOCKET;

                        
                        //PostQueuedCompletionStatus(g_iocp, 0, NULL, (LPOVERLAPPED)nop);

                        delete[]nop->buf;
                        nop->buf = NULL;

                        delete nop;
                        nop = NULL;
                }
        }
}
回复 支持 反对

使用道具 举报

签到天数: 24 天

发表于 2024-7-9 23:16:44 | 显示全部楼层   重庆市重庆市
要么写错了,要么此处的m_is一定还有其它地方会同时修改它(比如其它线程),你后面代码也没截图完整。

点评

不难发现其实同样的逻辑判断条件 有3个 应该是多写了 虽然没有对代码造成影响 最多只是废弃的判断   安徽省合肥市  发表于 2024-7-9 23:22
回复 支持 反对

使用道具 举报

结帖率:100% (10/10)
发表于 2024-7-9 22:52:19 高大上手机用户 | 显示全部楼层   山西省忻州市
不明觉厉
回复 支持 反对

使用道具 举报

结帖率:86% (44/51)

签到天数: 10 天

发表于 2024-7-9 21:56:04 | 显示全部楼层   湖南省长沙市
都m_is了,总不能线程抢占变量吧
回复 支持 反对

使用道具 举报

结帖率:100% (5/5)

签到天数: 2 天

发表于 2024-7-9 21:52:33 | 显示全部楼层   广东省佛山市
不知这里,下面还有,这是处理沾包的代码,应该外面的if是后来加的

点评

是复制上面代码来的 可能是编码习惯   安徽省合肥市  发表于 2024-7-9 22:43
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表