<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">Hi Александр,<div class=""><br class=""></div><div class="">Please, try this patch for fix the problem:</div><div class=""><div style="color: rgb(212, 212, 212); background-color: rgb(30, 30, 30); font-family: Menlo, Monaco, "Courier New", monospace; line-height: 18px; white-space: pre;" class=""><div class=""><span style="color: #6a9955;" class=""># HG changeset patch</span></div><div class=""><span style="color: #6a9955;" class=""># User Alexander Borisov <<a href="mailto:alexander.borisov@nginx.com" class="">alexander.borisov@nginx.com</a>></span></div><div class=""><span style="color: #6a9955;" class=""># Date 1548345939 -10800</span></div><div class=""><span style="color: #6a9955;" class=""># Thu Jan 24 19:05:39 2019 +0300</span></div><div class=""><span style="color: #6a9955;" class=""># Node ID a0a93e0673de88519bfd1062bdb6df166aa5ffa9</span></div><div class=""><span style="color: #6a9955;" class=""># Parent dace60fc4926351efe9322761faf974b0ce7964a</span></div><div class="">Perl: fixed issue with body reading from response object.</div><br class=""><div class=""><span style="color: #569cd6;" class="">diff -r dace60fc4926 -r a0a93e0673de src/perl/nxt_perl_psgi.c</span></div><div class=""><span style="color: #569cd6;" class="">--- a/src/perl/nxt_perl_psgi.c Wed Jan 23 17:47:53 2019 +0300</span></div><div class=""><span style="color: #569cd6;" class="">+++ b/src/perl/nxt_perl_psgi.c Thu Jan 24 19:05:39 2019 +0300</span></div><div class="">@@ -51,6 +51,9 @@</div><div class=""> </div><div class=""> static SV *nxt_perl_psgi_call_var_application(PerlInterpreter *my_perl,</div><div class=""> SV *env, SV *app, nxt_unit_request_info_t *req);</div><div class=""><span style="color: #b5cea8;" class="">+static SV *</span></div><div class=""><span style="color: #b5cea8;" class="">+nxt_perl_psgi_call_method(PerlInterpreter *my_perl, SV *obj, const char *method,</span></div><div class=""><span style="color: #b5cea8;" class="">+ nxt_unit_request_info_t *req);</span></div><div class=""> </div><div class=""> /* For currect load XS modules */</div><div class=""> EXTERN_C void boot_DynaLoader(pTHX_ CV *cv);</div><div class="">@@ -84,8 +87,6 @@</div><div class=""> SV *result, nxt_unit_request_info_t *req);</div><div class=""> static int nxt_perl_psgi_result_body_ref(PerlInterpreter *my_perl,</div><div class=""> SV *sv_body, nxt_unit_request_info_t *req);</div><div class=""><span style="color: #ce9178;" class="">-static ssize_t nxt_perl_psgi_io_read(nxt_unit_read_info_t *read_info,</span></div><div class=""><span style="color: #ce9178;" class="">- void *dst, size_t size);</span></div><div class=""> static int nxt_perl_psgi_result_array(PerlInterpreter *my_perl,</div><div class=""> SV *result, nxt_unit_request_info_t *req);</div><div class=""> </div><div class="">@@ -251,6 +252,43 @@</div><div class=""> }</div><div class=""> </div><div class=""> </div><div class=""><span style="color: #b5cea8;" class="">+static SV *</span></div><div class=""><span style="color: #b5cea8;" class="">+nxt_perl_psgi_call_method(PerlInterpreter *my_perl, SV *obj, const char *method,</span></div><div class=""><span style="color: #b5cea8;" class="">+ nxt_unit_request_info_t *req)</span></div><div class=""><span style="color: #b5cea8;" class="">+{</span></div><div class=""><span style="color: #b5cea8;" class="">+ SV *result;</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ dSP;</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ ENTER;</span></div><div class=""><span style="color: #b5cea8;" class="">+ SAVETMPS;</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ PUSHMARK(sp);</span></div><div class=""><span style="color: #b5cea8;" class="">+ XPUSHs(obj);</span></div><div class=""><span style="color: #b5cea8;" class="">+ PUTBACK;</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ call_method( method, G_EVAL|G_SCALAR);</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ SPAGAIN;</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ if (SvTRUE(ERRSV)) {</span></div><div class=""><span style="color: #b5cea8;" class="">+ nxt_unit_req_error(req, "PSGI: Failed to call method '%s':\n%s",</span></div><div class=""><span style="color: #b5cea8;" class="">+ method, SvPV_nolen(ERRSV));</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ result = NULL;</span></div><div class=""><span style="color: #b5cea8;" class="">+ }</span></div><div class=""><span style="color: #b5cea8;" class="">+ else {</span></div><div class=""><span style="color: #b5cea8;" class="">+ result = SvREFCNT_inc(POPs);</span></div><div class=""><span style="color: #b5cea8;" class="">+ }</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ PUTBACK;</span></div><div class=""><span style="color: #b5cea8;" class="">+ FREETMPS;</span></div><div class=""><span style="color: #b5cea8;" class="">+ LEAVE;</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ return result;</span></div><div class=""><span style="color: #b5cea8;" class="">+}</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""> static u_char *</div><div class=""> nxt_perl_psgi_module_create(nxt_task_t *task, const char *script)</div><div class=""> {</div><div class="">@@ -775,43 +813,40 @@</div><div class=""> nxt_perl_psgi_result_body_ref(PerlInterpreter *my_perl, SV *sv_body,</div><div class=""> nxt_unit_request_info_t *req)</div><div class=""> {</div><div class=""><span style="color: #ce9178;" class="">- IO *io;</span></div><div class=""><span style="color: #ce9178;" class="">- nxt_unit_read_info_t read_info;</span></div><div class=""><span style="color: #ce9178;" class="">- nxt_perl_psgi_io_ctx_t io_ctx;</span></div><div class=""><span style="color: #ce9178;" class="">-</span></div><div class=""><span style="color: #ce9178;" class="">- io = GvIO(SvRV(sv_body));</span></div><div class=""><span style="color: #b5cea8;" class="">+ SV *data;</span></div><div class=""><span style="color: #b5cea8;" class="">+ int rc;</span></div><div class=""><span style="color: #b5cea8;" class="">+ size_t len;</span></div><div class=""><span style="color: #b5cea8;" class="">+ const char *body;</span></div><div class=""> </div><div class=""><span style="color: #ce9178;" class="">- if (io == NULL) {</span></div><div class=""><span style="color: #ce9178;" class="">- return NXT_UNIT_OK;</span></div><div class=""><span style="color: #ce9178;" class="">- }</span></div><div class=""><span style="color: #b5cea8;" class="">+ do {</span></div><div class=""><span style="color: #b5cea8;" class="">+ data = nxt_perl_psgi_call_method(my_perl, sv_body, "getline", req);</span></div><div class=""><span style="color: #b5cea8;" class="">+ if (nxt_slow_path(data == NULL)) {</span></div><div class=""><span style="color: #b5cea8;" class="">+ return NXT_UNIT_ERROR;</span></div><div class=""><span style="color: #b5cea8;" class="">+ }</span></div><div class=""> </div><div class=""><span style="color: #ce9178;" class="">- io_ctx.my_perl = my_perl;</span></div><div class=""><span style="color: #ce9178;" class="">- io_ctx.fp = IoIFP(io);</span></div><div class=""><span style="color: #b5cea8;" class="">+ body = SvPV(data, len);</span></div><div class=""> </div><div class=""><span style="color: #ce9178;" class="">- read_info.read = nxt_perl_psgi_io_read;</span></div><div class=""><span style="color: #ce9178;" class="">- read_info.eof = PerlIO_eof(io_ctx.fp);</span></div><div class=""><span style="color: #ce9178;" class="">- read_info.buf_size = 8192;</span></div><div class=""><span style="color: #ce9178;" class="">- read_info.data = &io_ctx;</span></div><div class=""><span style="color: #b5cea8;" class="">+ if (len == 0) {</span></div><div class=""><span style="color: #b5cea8;" class="">+ SvREFCNT_dec(data);</span></div><div class=""> </div><div class=""><span style="color: #ce9178;" class="">- return nxt_unit_response_write_cb(req, &read_info);</span></div><div class=""><span style="color: #ce9178;" class="">-}</span></div><div class=""><span style="color: #ce9178;" class="">-</span></div><div class=""><span style="color: #b5cea8;" class="">+ data = nxt_perl_psgi_call_method(my_perl, sv_body, "close", req);</span></div><div class=""><span style="color: #b5cea8;" class="">+ SvREFCNT_dec(data);</span></div><div class=""> </div><div class=""><span style="color: #ce9178;" class="">-static ssize_t</span></div><div class=""><span style="color: #ce9178;" class="">-nxt_perl_psgi_io_read(nxt_unit_read_info_t *read_info, void *dst, size_t size)</span></div><div class=""><span style="color: #ce9178;" class="">-{</span></div><div class=""><span style="color: #ce9178;" class="">- ssize_t res;</span></div><div class=""><span style="color: #ce9178;" class="">- nxt_perl_psgi_io_ctx_t *ctx;</span></div><div class=""><span style="color: #b5cea8;" class="">+ break;</span></div><div class=""><span style="color: #b5cea8;" class="">+ }</span></div><div class=""><span style="color: #b5cea8;" class="">+</span></div><div class=""><span style="color: #b5cea8;" class="">+ rc = nxt_unit_response_write(req, body, len);</span></div><div class=""> </div><div class=""><span style="color: #ce9178;" class="">- ctx = read_info->data;</span></div><div class=""><span style="color: #ce9178;" class="">-</span></div><div class=""><span style="color: #ce9178;" class="">- dTHXa(ctx->my_perl);</span></div><div class=""><span style="color: #b5cea8;" class="">+ SvREFCNT_dec(data);</span></div><div class=""> </div><div class=""><span style="color: #ce9178;" class="">- res = PerlIO_read(ctx->fp, dst, size);</span></div><div class=""><span style="color: #b5cea8;" class="">+ if (nxt_slow_path(rc != NXT_UNIT_OK)) {</span></div><div class=""><span style="color: #b5cea8;" class="">+ nxt_unit_req_error(req, "PSGI: Failed to read line from response");</span></div><div class=""><span style="color: #b5cea8;" class="">+ return rc;</span></div><div class=""><span style="color: #b5cea8;" class="">+ }</span></div><div class=""> </div><div class=""><span style="color: #ce9178;" class="">- read_info->eof = PerlIO_eof(ctx->fp);</span></div><div class=""><span style="color: #b5cea8;" class="">+ } while (1);</span></div><div class=""> </div><div class=""><span style="color: #ce9178;" class="">- return res;</span></div><div class=""><span style="color: #b5cea8;" class="">+ return NXT_UNIT_OK;</span></div><div class=""> }</div><div class=""> </div><div class=""> </div><br class=""></div><div> <br class=""><blockquote type="cite" class=""><div class="">23 янв. 2019 г., в 22:40, Александр Поволоцкий <<a href="mailto:tarkhil@over.ru" class="">tarkhil@over.ru</a>> написал(а):</div><br class="Apple-interchange-newline"><div class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">On 23.01.2019 19:27, Valentin V. Bartenev wrote:</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">On Wednesday 23 January 2019 18:56:57 Александр Поволоцкий wrote:<br class=""><blockquote type="cite" class="">Hello<br class=""><br class="">I'm using Mojolicious::Lite, a Perl framework, which should support PSGI.<br class=""><br class="">The smallest possible app, however, does not run<br class=""><br class="">===<br class="">#!/usr/bin/env perl<br class="">use Mojolicious::Lite;<br class="">get '/' => sub {<br class=""> my $c = shift;<br class="">$c->render(text=>'hello');<br class="">};<br class=""><br class="">app->start;<br class="">===<br class=""><br class="">2019/01/23 09:41:23.029 [error] 26579#26579 [unit] #4: PSGI: Failed to<br class="">run Perl Application:<br class="">Undefined subroutine &main::1 called.<br class=""><br class="">plackup runs it Ok, so there is some incompatibility, which I do not<br class="">know how to trace.<br class=""><br class="">What kind of error in framework can it be and how to trace it?<br class=""><br class=""></blockquote>[..]<br class=""><br class=""><a href="https://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#PSGI-Plack" class="">https://mojolicious.org/perldoc/Mojolicious/Guides/Cookbook#PSGI-Plack</a><br class=""><br class="">Seems it doesn't behave like PSGI application by default,<br class="">unless there's a PLACK_ENV environment variable.<br class=""><br class="">Unit doesn't set PLACK_ENV by default.<br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Sorry for doubleposting, but I've found one strange thing.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">root@VMNEW:~# telnet localhost 8000</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Trying ::1...</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Trying 127.0.0.1...</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Connected to localhost.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Escape character is '^]'.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">GET / HTTP/1.0</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">HTTP/1.1 200 OK</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Content-Length: 6</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Date: Wed, 23 Jan 2019 19:31:37 GMT</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Content-Type: text/html;charset=UTF-8</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Server: Unit/1.7</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Connection closed by foreign host.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">when I was expecting "hello\n" to be sent as output. You see, Content-Length is correct, but no actual content.</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Alex</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">_______________________________________________</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">unit mailing list</span><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="mailto:unit@nginx.org" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">unit@nginx.org</a><br style="caret-color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><a href="https://mailman.nginx.org/mailman/listinfo/unit" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">https://mailman.nginx.org/mailman/listinfo/unit</a></div></blockquote></div><br class=""></div></body></html>