Giter Club home page Giter Club logo

cppnet's People

Contributors

awen162 avatar caozhiyi avatar logerrors avatar mingyunyuansu avatar simonhancrew avatar tangyu1018 avatar yerannnnnn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cppnet's Issues

请问该如何处理这个 EPOLLHUP 事件?

作者您好!非常欣赏您开源的这份代码。
一、在我的学习过程中,发现有如下现象:

    1、下载并编译代码,运行其中的 echo_server.exe 程序;
    2、运行windows的任务管理器--->性能----->打开资源监视器,发现echo_server.exe进程的cpu 使用率为0,正常;
    3、运行echo_client.exe,等到在echo_client.exe窗口中能看到数据从服务器返回后,关闭echo_client.exe;
    4、在资源监视器中发现,echo_server.exe进程cpu占用率异常高,50%以上。

  二、我的环境:
    1、windows 11;

e52eedfa07236bfba94641cc76d6de8
2、编译工具:Visual studio 2022。

 三、跟踪代码的发现:
    1、在epoll_action.cpp的EpollEventActions::ProcessEvent() 函数中,
          每次循环都能得到一个 EPOLLHUP 事件;

    2、在接下来的epoll_action.cpp文件的第290行:
          OnEvent(_active_list, ret); 
         这里并没有对EPOLLHUP 事件进行任何处理,从而使得系统进入一个无限循环当中。

        请教:这里该如何处理为好?
                                                                                                        谢谢!

大数据包的问题

发送大数据包在接收端会无法完整的接收,比如上万个字节的字符串

作为客户端建立连接问题

感谢作者提供这么好的网络库供开发学习,在测试过程中遇到如下问题,请帮忙看看,谢谢!

环境

ubuntu 18.04 LTS

问题描述

在测试simpleclient时,如果服务端的端口不启动,simpleclientConnectionCallback也是会被回调的。
正常的逻辑来说,如果服务端端口没有启动,作为客户的connect回调函数不应该被调用。

问题排查

通过调试,发现在事件循环线程中去连接服务端时,如果连接失败后,会设置200ms的超时,代码如下:

        auto rw_sock = std::dynamic_pointer_cast<RWSocket>(sock);
        if (ret._return_value == 0) {
            rw_sock->OnConnect(CEC_SUCCESS);
            return true;

        } else if (ret._errno == EINPROGRESS || ret._errno == WSAEWOULDBLOCK) {
            if (CheckConnect(rw_sock->GetSocket())) {
                rw_sock->OnConnect(CEC_SUCCESS);
                return true;
            } else {
                auto rw_sock = std::dynamic_pointer_cast<RWSocket>(sock);
                rw_sock->AddTimer(200);
                return false;
            }
        }

在超时回调函数中,调用了CheckConnect函数,poll函数在这个socket上第一次时报错,第二次时就返回0了。

void RWSocket::OnTimer() {
    if (_connecting) {
        __connecting_socket_map.erase(_sock);
        if (CheckConnect(GetSocket())) {
            OnConnect(CEC_SUCCESS);
        } else {
            OnConnect(CEC_CONNECT_REFUSE);
        }
        return;
    }
    auto cppnet_base = _cppnet_base.lock();
    if (!cppnet_base) {
        return;
    }
    cppnet_base->OnTimer(shared_from_this());
}

额外

在正式的应用场景中,connect最好能设置超时,我看CheckConnect里面的poll函数是没有设置超时的,这个也能一并处理下吗?
再次感谢开源这么棒的网络库。

内存分配PoolAlloter

void* PoolAlloter::ChunkAlloc(uint32_t size, uint32_t& nums) {
//
//
//suspicion
if (left_bytes > 0) {
MemNode* my_free = _free_list[FreeListIndex(left_bytes)];
((MemNode*)_pool_start)->_next = my_free;
_free_list[FreeListIndex(size)] = (MemNode*)_pool_start;
}

}

httpser: segmentation fault 以及 free(): corrupted unsorted chunks 错误

你好,我通过项目的 CMakeLists 编译了 test/http 下的 httpser 示例程序,然后通过 wget 访问一个页面,wget 单个可以下载成功,但是使用 apache benchmark 测试的时候:

ab -n 10000 -c 1 http://127.0.0.1:8921/hello

可以成功测试,

ab -n 10000 -c 2 http://127.0.0.1:8921/hello

会出现

[1]    21053 segmentation fault  sudo ./httpser

错误,然后 -c 为 2 ~ 13 都是出现 segmentation fault 错误,
-c 14 以后会出现

free(): corrupted unsorted chunks
[1]    21455 abort      ./httpser

-c 20 以后会出现

free(): corrupted unsorted chunks
free(): corrupted unsorted chunks
[1]    21359 abort      ./httpser

的错误,请问我应该如何找到错误提供更多的信息 ?

编译器是 g++-11, x64 Ubuntu 20.04

simple test error

  1. 在嵌入式Linux上编译后,运行simple的测试,server启动后,client连接出现core了,Server端显示连接又断开了,gdb调试core的堆栈如下:
    image

  2. 请问有现成的http client类吗,还是说要自己改。

Linux编译报错,存在两处函数未正确引用

**第一处错误 bind函数未定义:

**
In file included from base/RunnableAloneTaskList.h:4,
from base/Log.h:7,
from base/Log.cpp:3:
base/Runnable.h: In member function ‘virtual void base::CRunnable::Start()’:
base/Runnable.h:18:78: error: ‘bind’ is not a member of ‘std’
18 | _pthread = std::shared_ptrstd::thread(new std::thread(std::bind(&CRunnable::Run, this)));

解决措施:
找到源代码 /base/Runnalbe.h,在第4行增加 “#include ”

**第二处问题readv writev函数未定义

**
e::CMemSharePtrcppnet::CEventHandler&)’:
net/linux/SocketImpl.cpp:155:28: error: ‘readv’ was not declared in this scope; did you mean ‘read’?
155 | recv_len = readv(socket_ptr->GetSocket(), (iovec*)&io_vec.begin(), io_vec.size());
| ^~~~~
| read
net/linux/SocketImpl.cpp: In member function ‘void cppnet::CSocketImpl::Send(base::CMemSharePtrcppnet::CEventHandler&)’:
net/linux/SocketImpl.cpp:208:23: error: ‘writev’ was not declared in this scope; did you mean ‘write’?
208 | int res = writev(socket_ptr->GetSocket(), (iovec
)&*io_vec.begin(), io_vec.size());
| ^~~~~~

解决措施:
源代码中 /net/linux/SocketImpl.cpp第5行增加“#include <sys/uio.h>”

windows环境下simple测试程序,client不能连接server

1、win10环境下编译,simple测试程序,client不能连接server,用其他第三方client程序测试,可以正确连接到simpleServer。linux环境下编译测试正常。
2、同样用simple测试程序,server打印对方连接端口不对。
3、发现连接端口不对后,我尝试转换到IPV4环境下测试,在
CppNetBase::ListenAndAccept函数 处更改为
auto ret = OsHandle::TcpSocket(true);
结果在 OsHandle::Bind(int64_t sockfd, Address &address) 函数处返回的address还是IPV6。
先列出问题,抽空再仔细看看代码。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.