From: akr@... Date: 2015-11-17T08:19:15+00:00 Subject: [ruby-core:71517] [Ruby trunk - Bug #11701] [Open] recvmsg for UDP without argument Issue #11701 has been reported by Akira Tanaka. ---------------------------------------- Bug #11701: recvmsg for UDP without argument https://bugs.ruby-lang.org/issues/11701 * Author: Akira Tanaka * Status: Open * Priority: Normal * Assignee: * ruby -v: * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- 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. ``` -- https://bugs.ruby-lang.org/