2017-10-28 1 views
0

Ruby UDPSocketIOオブジェクトで多態的に使用するためのベストプラクティスは何ですか?私は自分のライブラリーのためのシリアライゼーションクラスを書いて、ネットワークがFileまたはStringIOオブジェクトと同じソケット扱いたい、とUDPSocketIOから継承んが、私はwrite_nonblockしようとすると、ソケットはErrno::EDESTADDRREQ提起しています:Ruby UDPSocketをポリモーフィックにIOで使用するにはどうすればよいですか?

2.4.1 :1 > require 'socket' 
=> true 
2.4.1 :2 > sock = UDPSocket.new 
=> #<UDPSocket:fd 4> 
2.4.1 :3 > sock.bind('127.0.0.1', 0) 
=> 0 
2.4.1 :4 > sock.write_nonblock 'nonblock' 
Errno::EDESTADDRREQ: Destination address required 
     from <internal:prelude>:136:in `__write_nonblock' 
     from <internal:prelude>:136:in `write_nonblock' 
     from (irb):4 
     from /usr/local/rvm/rubies/ruby-2.4.1/bin/irb:11:in `<main>' 

答えて

0

ソケットはconnectsend経由先を指定しなくても、それにwriteすることができます前に、デフォルトのアドレスにD」する必要があります。

2.4.1 :5 > sock.connect('127.0.0.1', 12345) 
=> 0 
2.4.1 :6 > sock.write_nonblock 'nonblock' 
=> 8 
関連する問題