ZLMediaKit/ZLToolKit

您好,请教一个问题createsocket 创建后,关闭程序时需要释放么

downloadproject opened this issue · 8 comments

QWeakPointer<MainWindow> weakSelf = QWeakPointer<MainWindow>(sharedFromThis());
sockRecv  = Socket::createSocket();//创建一个UDP数据接收端口
sockSend  = Socket::createSocket();//创建一个UDP数据发送端口

sockRecv->bindUdpSock(9001);//接收UDP绑定9001端口
sockSend->bindUdpSock(0, "0.0.0.0");//发送UDP随机端口

sockRecv->setOnRead([weakSelf](const Buffer::Ptr &buf, struct sockaddr *addr , int){
        //接收到数据回调
       // DebugL << "recv data form " << getIP(addr) << ":" << buf->data();
    auto strongSelf = weakSelf.lock();
    if(!strongSelf) {
        return ;
    }
    strongSelf->handleOneRtp((uint8_t *) buf->data(), buf->size());
});

我创建了以后,关闭程序的时候会报如下错误,
the inferior stopped because it received a signal from operating system

Signal name :SIGSEGV

你这个代码看起来没什么问题

您好,我用qt6,整个工程就写了一条语句Socket::Ptr sockRecv = Socket::createSocket();//创建一个UDP数据接收端口,在调试状态关闭程序,程序会崩溃,恳请指教,谢谢!

可以看下栈信息.

实在不好意思,打扰了,我调试您的test_tcpClient时,注释了最后的semaphore几条语句 ,在debug下,程序会报错,恳请指教!谢谢!

int main() {
// 设置日志系统
Logger::Instance().add(std::make_shared());
Logger::Instance().setWriter(std::make_shared());

TestClient::Ptr client(new TestClient());//必须使用智能指针
client->startConnect("127.0.0.1",9000);//连接服务器

TcpClientWithSSL<TestClient>::Ptr clientSSL(new TcpClientWithSSL<TestClient>());//必须使用智能指针
clientSSL->startConnect("127.0.0.1",9001);//连接服务器

//退出程序事件处理
//static semaphore sem;

// signal(SIGINT, { sem.post(); });// 设置退出信号
//sem.wait();
return 0;
}

您好,调试test_udpSock时,我将while(!exitProgram) 改成 if(!exitProgram) 在debug下,程序也会崩溃。

the inferior stopped because it received a signal from operating system

Signal name :SIGSEGV

不好意思,能帮我看下么?谢谢!!

您好,调试test_udpSock时,我将while(!exitProgram) 改成 if(!exitProgram) 在debug下,程序也会崩溃。

the inferior stopped because it received a signal from operating system

Signal name :SIGSEGV

这个测试也没能复现。你可以用 gdb 调试下看看。

好的,谢谢!