[pgsql-jp: 31728] Re: TCP/IP 接続時、約32k以上のデータを select すると止まる。

hirohito @ murata.co.jp hirohito @ murata.co.jp
2003年 12月 8日 (月) 18:01:22 JST


> で、つい忘れてしまっていたのですが、問題のサーバだけ ssl=true でした。
> SSLが絡むと、当方の環境では現象が発生するということみたいです。

SSLとは、気がつきませんでした。
私は、SSLは使ったことがなかったもので。
manualを参考に自筆署名の証明書を作り、テストしたところ再現しました。

gdbにかけて、黙りになったところで interrupt & back traceした結果、
SSL通信で無限ループしてる箇所がありました。
SSL_read()が、データがもう無いよと言っているのに、libpq側が、
データをずっと読み続けようとしていたのが原因です。

libpqに以下のpatchを当てて、コンパイルし直すと直ると思います。

*** src/interfaces/libpq/fe-secure.c.orig	Fri Apr 11 08:03:13 2003
--- src/interfaces/libpq/fe-secure.c	Mon Dec  8 17:28:18 2003
***************
*** 269,274 ****
--- 269,276 ----
  			case SSL_ERROR_NONE:
  				break;
  			case SSL_ERROR_WANT_READ:
+ 				n = 0;
+ 				break;
  			case SSL_ERROR_WANT_WRITE:
  				/* XXX to support nonblock I/O, we should return 0 here */
  				goto rloop;


また、この不具合は、最新版(postgresql-7.4)では、すでに修正されているようです。


--
ひろひと



pgsql-jp メーリングリストの案内