2011-12-12 3 views
1

ソケットに関するいくつかの例を試してみると、私はこれを見てきましたが、私は少し構文に苦労しています。ここにコードはありますが、うまくいきます。私は、接続が終了が呼び出されるまでループするスレッドを起動する前に検出されるまでserver.acceptコードを待って、それを閉じていることを考え出した傷少し頭の後ルビドキュメントの入手先(または読む方法)

require "socket" 

server = TCPServer.new(1234) 

loop do 
    Thread.start(server.accept) do 
    |connection| 
    puts "Connection started" 
    while line = connection.gets 
     break if line =~ /quit/ 
     puts line 
     connection.puts "received" 
    end 

    conneciton.puts "closing the connection" 
    connection.close 
    end  
end 

私はちょっと助けたいと思いますが、どのようにしてドキュメントから推測したのでしょうか?私は間違った場所で文書を探していますか、それとも明白な場所にありますか?正しく読んでいませんか?ここに私が使ってきたソースがあります。

http://www.ruby-doc.org/stdlib-1.9.2/libdoc/socket/rdoc/TCPServer.html#method-i-accept

+1

これはソースの公式な場所です。経験豊富な開発者が作成したインターネットや書籍は、自明ではない概念のチュートリアルやドキュメンテーションの優れた追加情報源です。 – Phrogz

+0

コードの強調表示は、 'TCPServer.open(" 127.0.0.1 "、14641){| serv |'には灰色の背景がありません。 –

答えて

3

真実は、そのドキュメントが良いかもしれません。

このドキュメントでは、POSIX acceptコールと非常によく似た(多分同じでも)動作をしていることを前提としています。ドキュメントには接続が保留されておらず、明示的にリクエストのノンブロッキング操作 "accept()は接続が存在するまでブロックする")。 (「ブロック」はUNIXの特定のタイプの待機を表します)。

Rubyクラスのノンブロッキング操作はaccept_nonblock(あなたがリンクしたドキュメントによる)ですので、acceptがブロックしていると推測できます。

Rubyのマニュアルはボランティアによって管理されており、より良いものにするためにパッチを受け入れることができれば幸いです。

関連する問題