Joel VanderWerf wrote: > Is there any reason why Socket#recv can't take an optional buffer > argument the way IO#read does? > > Otherwise, Socket#recv is always allocating strings, hence burdening GC. > > I saw about a 20% improvement by using #read instead of #recv in some > socket code, but of course the unbuffered vs. buffered difference comes > into play there too. Sounds like it would make a good patch. I think the reason it's not is that [afaik] ruby typically doesn't have default lengths for strings...i.e. if recv returns less than the desired number of bytes, ruby 'tends' to return a string of exactly that length [and that much memory allocated] so...in our hypothetical example above, it should...leave it still large? [i.e. it would require string itself to change]. That being said, you CAN have a string with extra nulls in it "abc\0def" and that's a valid string, so maybe recv_into_string could just write out something like that... thoughts? -R -- Posted via http://www.ruby-forum.com/.