>>658
sendで使っている数値の20だけど、第二引数は flags になってる

mingw32(windows)だと (MSG_MAXIOVLEN | MSG_DONTROUTE)
linuxだと (MSG_PROBE | MSG_DONTROUTE)
FreeBSDだと (MSG_TRUNC | MSG_DONTROUTE)

を意味することになり、あなたの意図するところじゃないはず

recvの方は第一引数で最大20バイトの読み込みを意味するけど、
readlineは改行まで読み込むメソッドだから、振る舞い方に違いがある


一つの通信単位が任意長で、改行で終わらせたいなら
s.send(params.to_query, 20) を s.puts(params.to_query); s.flush

s.recv(20) を s.readline じゃだめかな?

もっとも params.to_query に改行が含まれているとうまく行かないけれど