0

我安装了这个 gem - https://github.com/pluskid/rmmseg-cpp

(文档:http ://rmmseg-cpp.rubyforge.org/ )

当我尝试运行此示例命令时:$echo "我们都喜欢用 Ruby" | rmmseg

我得到:

/Users/webmagnets/.rvm/gems/ruby-1.9.3-p327@blt/gems/rmmseg-0.1.6/lib/rmmseg/algorithm.rb:24:in `next_token': undefined method `length' for #<Enumerator: "我们都喜欢用 Ruby\n":each_char> (NoMethodError)
    from /Users/webmagnets/.rvm/gems/ruby-1.9.3-p327@blt/gems/rmmseg-0.1.6/lib/rmmseg/algorithm.rb:44:in `segment'
    from /Users/webmagnets/.rvm/gems/ruby-1.9.3-p327@blt/gems/rmmseg-0.1.6/lib/rmmseg.rb:12:in `segment'
    from /Users/webmagnets/.rvm/gems/ruby-1.9.3-p327@blt/gems/rmmseg-0.1.6/bin/rmmseg:65:in `<top (required)>'
    from /Users/webmagnets/.rvm/gems/ruby-1.9.3-p327@blt/bin/rmmseg:23:in `load'
    from /Users/webmagnets/.rvm/gems/ruby-1.9.3-p327@blt/bin/rmmseg:23:in `<main>'

Perl IO::Socket::UNIX Connect with Timeout 给出 EAGAIN/EWOULDBLOCK

Ubuntu Linux,2.6.32-45 内核,64b,Perl 5.10.1

我将许多新的 IO::Socket::UNIX 流套接字连接到服务器,并且大多数情况下它们工作正常。但有时在更快的处理器上的重线程环境中,它们会返回“资源暂时不可用”(EAGAIN/EWOULDBLOCK)。我在 Connect 上使用了超时,因此这会导致套接字在连接期间进入非阻塞模式。但是我的超时时间没有发生 - 它不会等待任何明显的时间,它会很快返回。

我看到在 IO::Socket 内部,它尝试连接,如果它因 EINPROGRESS 或 EAGAIN/EWOULDBLOCK 失败,它会进行选择以等待设置写入位。到目前为止,这似乎很正常。在我的情况下,选择很快成功,这意味着写入位已设置,然后代码尝试重新连接。(我猜这是试图通过错误滑动来获取任何错误?)无论如何,重新连接再次失败并使用 EAGAIN/EWOULDBLOCK。

在我的代码中,这很容易通过重试循环来解决。但我不明白为什么当套接字变为可写时,套接字不可重新连接。我认为选择保护对于非阻塞连接总是足够的。显然不是; 所以我的问题是:

  • What conditions cause the connect to fail when the select works (the write bit gets set)?
  • 有没有比旋转和重试更好的方法来等待连接成功?纺纱浪费循环。相反,我希望它阻止诸如选择/轮询之类的事情,但我仍然需要超时。

谢谢,

——史蒂夫

4

1 回答 1

0

我想到了。我使用的是 rmmseg 而不是 rmmseg-cpp。

于 2012-12-03T17:50:59.113 回答