c++ - Qt5 有没有办法让 QLocalServer 监听抽象的 unix 套接字?

标签 c++ qt sockets unix qt5

是否可以让QLocalServer 对象监听unix 抽象套接字? 我没有看到 qt5 docs 中提到的这种可能性,这里只提到了命名管道:

Usually you would just pass in a name like "foo", but on Unix this could also be a path such as "/tmp/foo" and on Windows this could be a pipe path such as "\.\pipe\foo"

那么我应该创建自己的套接字并让 QLocalServer 对象监听它吗?

int sockfd = ... // a lot of work
QLocalServer *srv = new QLocalServer(this);
srv->listen(static_cast<qintptr>(&sockfd)); // bad code

知道 Qt 抽象是怎样的以及它提供了多少可能性,这听起来很奇怪。

最佳答案

您可能已经解决了这个问题,但以防万一...

将手动设置的套接字描述符传递给 QLocalServer::listen 的事实失败似乎有点奇怪,所以我更仔细地查看了 Qt 源代码。问题是使用 qintptr 作为传递的参数类型相当具有误导性。查看代码表明 qintptr 值被视为套接字描述符——而不是顾名思义的指向套接字描述符的指针。

所以,尝试改变...

srv->listen(static_cast<qintptr>(&sockfd));

为了...

srv->listen(sockfd);

看看是否能解决问题。

(注意:我已经编写了一些测试代码,将上述修复与 AF_UNIX + SOCK_STREAM 套接字结合使用,一切似乎都按预期工作。)

关于c++ - Qt5 有没有办法让 QLocalServer 监听抽象的 unix 套接字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42085259/

相关文章:

c++ - 在没有显式调用的情况下强制在子方法之前执行父方法

c++ - 带有 Qt 的 OpenCV : The program has unexpectedly finished

c# - 将 unsigned long long 从 C++ 服务器流式传输到 C# 客户端

c - Qt多线程应用程序卡住并且多个线程等待相同的互斥体

c# - C#在套接字中发送屏幕截图

java - Java无法从服务器读取数据

c++ - 最快的 SHA1 实现是什么?

c++ - 制作键盘记录器

c++ - 读取 string 的字符时出错。分配内存

c++ - QT中QByteArray和QByte Stream如何释放内存