2017-10-28 163 views
0

使用Ruby UDPSocket多態與IO對象的最佳做法是什麼?我正在寫一個序列化類我的圖書館,並希望把網絡套接字同爲FileStringIO對象,UDPSocket沒有從IO繼承,但是當我嘗試write_nonblock,插座引發Errno::EDESTADDRREQ我該如何在IO中多態地使用Ruby UDPSocket?

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

插座必須connect「通過send之前,你可以write將其D到A默認地址不指定目標:

2.4.1 :5 > sock.connect('127.0.0.1', 12345) 
=> 0 
2.4.1 :6 > sock.write_nonblock 'nonblock' 
=> 8