<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>