#httpよく分からなくて恐縮なんですが、rfc.httpで、あるサイトに同じhttp-connectionオブジェクトを使って100回http-getすると SYSTEM-ERROR: ssl_read() failed: Undefined error: 0 っていう変なエラーが上がってきます。keep alive的な上限ならそういうhttp-errorか何かが上がってほしいんですが、何かおかしなことしてますでしょうか?
#*** SYSTEM-ERROR: ssl_read() failed: Undefined error: 0
Stack Trace:
_______________________________________
0 (read-line remote)
at "/usr/local/share/gauche-0.97/0.9.9_rc2/lib/rfc/http.scm":825
1 (parse-status-line (read-line remote))
at "/usr/local/share/gauche-0.97/0.9.9_rc2/lib/rfc/http.scm":825
2 (receive-header in)
at "/usr/local/share/gauche-0.97/0.9.9_rc2/lib/rfc/http.scm":278
3 (with-connection conn (^ (i o) (request-response i o method u ...
at "/usr/local/share/gauche-0.97/0.9.9_rc2/lib/rfc/http.scm":305
#101回な気がしてきました。尚、最初のレスポンスヘッダにkeep-alive: timeout~ max~みたいなのはありませんでした。
#いや特にそういう制限は無かった気がするんで内部的になにかリークしててリソースくいつぶしちゃったとかがありそう
#あ、ssl_read()は失敗してもerrnoセットしないからSYSTEM-ERRORを投げてるのがおかしいな。
#diff --git a/ext/tls/tls.c b/ext/tls/tls.c
index eae859a..3a40ed5 100644
--- a/ext/tls/tls.c
+++ b/ext/tls/tls.c
@@ -339,7 +339,7 @@ static ScmObj ax_read(ScmTLS* tls)
ax_close_check(t, "read");
int r; uint8_t* buf;
while ((r = ssl_read(t->conn, &buf)) == SSL_OK);
- if (r < 0) Scm_SysError("ssl_read() failed");
+ if (r < 0) Scm_Error("ssl_read() failed: %d", r);
return Scm_MakeString((char*) buf, r, r, SCM_STRING_INCOMPLETE);
}
#とりあえずこれでエラーコード調べてみてください。コードの中身は ext/tls/axTLS/ssl/ssl.h niarimasu