小编rof*_*fer的帖子

Boost Asio的主机名解析如何在Linux上运行?是否可以使用NSS?

我正在尝试在没有网络连接的情况下使我的网络应用程序在本地工作(服务器和客户端都在同一台计算机上运行).这似乎偶尔"正常工作",但大多数时候我最终会:

terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::system::system_error> >'
       what(): Host not found (authoritative)
    Aborted
Run Code Online (Sandbox Code Playgroud)

我目前使用的代码是:

  tcp::resolver::query query(host, PORT);
  tcp::resolver::iterator endpointIterator = resolver.resolve(query);
  tcp::resolver::iterator end;

  boost::system::error_code error = boost::asio::error::host_not_found;
  while(error && endpointIterator != end)
  {
    mySocket.close();
    mySocket.connect(*endpointIterator++, error);
  }
  if(error)
    throw boost::system::system_error(error);
Run Code Online (Sandbox Code Playgroud)

我很确定我已经将问题缩小到ip :: basic_resolver :: resolve,但我无法弄清楚它是如何在Linux上实现的,或者我可能想要使用的其他内容. 似乎是同一个问题.似乎只是不执行任何查找,只使用127.0.0.1应该工作,但当我尝试用.替换查询行时

tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::address_configured | boost::asio::ip::resolver_query_base::numeric_host
Run Code Online (Sandbox Code Playgroud)

它没有工作. 在我写这篇文章的过程中,我发现了我的错误,如果loopback设备是唯一一个带地址的设备,则address_configured标志(默认设置)会阻止resolve返回.我仍然发布这个问题,希望它可以帮助别人,但我已经解决了我的问题.

现在我用

tcp::resolver::query query(host, PORT, boost::asio::ip::resolver_query_base::numeric_service);
Run Code Online (Sandbox Code Playgroud)

虽然其他人可能不想要我正在使用的标志,如果他们想要查找服务名称(我只是使用端口号).

linux networking boost-asio

8
推荐指数
2
解决办法
7289
查看次数

在多个文件之间共享枚举的正确方法是什么?

我想在我当前(C++)项目的客户端和服务器部分使用相同的枚举,但我不确定正确的方法来执行此操作.我可以轻松地在其自己的文件中编写枚举,并将其包含在两个文件中,但这感觉就像是糟糕的做法.将它放在命名空间中,然后将它包含在两者中是正确的方法吗?

我知道这有点主观,如果有一个更好的"最佳实践"问题,请指导我.

编辑(阐述):我正在从客户端向服务器发送数据,在这种情况下,我想告诉客户有关状态的变化.但是,我想避免每次我想要更改它时发送组成状态的所有信息,而是我只想发送一个引用数组中索引的数字.因此,我认为最好的方法是使用枚举,但我需要在客户端和服务器上使用相同的枚举,以便他们都能理解数字.希望有道理.

c++

5
推荐指数
2
解决办法
1万
查看次数

使用compatiblebiltiy库时,setRetainInstance不适用于ListFragment

我正在尝试在方向更改中保存ListFragment子类,因此我将setRetainInstance(true)添加到onCreate函数的末尾.我添加了一个onSaveInstanceState方法将所有数据添加到一个包中,然后将代码添加到onActivityCreated中以加载该数据.不幸的是,它不会起作用.

当我在Log.d的帮助下添加了一些调试消息时,我发现不仅没有调用onSaveInstanceState,而且onCreate是(文档似乎说当retainInstance为true时不应该发生).onCreate和onActivityCreated都没有捆绑我的数据(毫无疑问).

我猜这可能是兼容性库的一个问题,虽然我没有Android 3.0+设备来测试这个.

任何帮助表示赞赏,如果有必要,我可以发布一些代码片段,尽管我没有做任何复杂的事情.

更新:当我改变方向时(它应该是这样),没有调用onDestroy,所以似乎有些setRetainInstance正在工作

android android-compatibility android-fragments

5
推荐指数
1
解决办法
4211
查看次数

GHC未定义对依赖路径的引用

我最近制作了一个cabal包,可以在这里看到 它包含一个库和一些使用它的小例子程序.一切都按照预期建立和运作.

我想在一个使用这个库的新包中构建一个可执行文件,但是我继续遇到一个我无法破译的链接错误:

/my/path/RandomAgent/.cabal-sandbox/lib/x86_64-linux-ghc-7.8.4/rlglue-0.2.1.1/libHSrlglue-0.2.1.1.a(Agent.o):(.text+0x34f1): undefined reference to `rlgluezm0zi2zi1zi1_Pathszurlglue_version1_closure'
Run Code Online (Sandbox Code Playgroud)

collect2:错误:ld返回1退出状态为了使诊断更简单我将其中一个示例程序移动到我的新包中,发现它甚至无法正确构建.您可以在此处找到该可执行文件的版本.

从这一点我得出结论,问题可能出现在我的.cabal文件中,但我看不出有什么问题.该错误似乎也指代了cabal为第一个包自动生成的Paths_rlglue模块.

任何人都可以帮助我理解为什么我收到此错误?

linker haskell linker-errors ghc cabal

3
推荐指数
1
解决办法
396
查看次数