是否可以让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/