Bug #11701
recvmsg for UDP without argument
Description
It seems recvmsg without argument doesn't work well for UDP now.
Following example sends a packet which size is 10000 bytes but
receives a packet which size is 4096 bytes.
% ./ruby -rsocket -ve 's1 = Addrinfo.udp("127.0.0.1", 0).bind s2 = s1.connect_address.connect s2.send("a"*10000, 0) ret = s1.recvmsg p ret[0].length ' ruby 2.3.0dev (2015-11-17 trunk 52613) [x86_64-linux] 4096
ruby-2.3.0-preview1 worked well.
It receives a packet which size is 10000 bytes.
% ruby-2.3.0-preview1 -rsocket -ve 's1 = Addrinfo.udp("127.0.0.1", 0).bind s2 = s1.connect_address.connect s2.send("a"*10000, 0) ret = s1.recvmsg p ret[0].length ' ruby 2.3.0preview1 (2015-11-11 trunk 52539) [x86_64-linux] 10000
This behavior (recvmsg without arguments) is documented as follows:
maxmesglen and maxcontrollen can be nil. In that case, the buffer will be grown until the message is not truncated. Internally, MSG_PEEK is used and MSG_TRUNC/MSG_CTRUNC are checked.
Updated by normalperson (Eric Wong) about 5 years ago
akr@fsij.org wrote:
Bug #11701: recvmsg for UDP without argument
https://bugs.ruby-lang.org/issues/11701
Oops, will take a look...
Updated by Anonymous about 5 years ago
- Status changed from Open to Closed
Applied in changeset r52625.
socket: fix recvmsg without argument
- ext/socket/ancdata.c (bsock_recvmsg_internal): grow buffer on unspecified maxdatlen [ruby-core:71517] [Bug #11701]
- ext/socket/lib/socket.rb (Socket#recvmsg): nil default for dlen (Socket#recvmsg_nonblock): ditto
- test/socket/test_socket.rb (test_recvmsg_udp_no_arg): new test