HTTP 1.1 is keep-alive by default. If "Connection" header is not set, it is
assumed keep-alive.
EP_FILE always sets Content-Length, thus it is OK for it to be keep-alive.
EP_USER assumes that event handler uses "chunked" functions, so it's OK for
EP_USER to be keep-alive too.
The rest of endpoints (e.g. CGI) are not guaranteed to set Content-Length,
thus they're closing the connection.


On Thu, Jun 12, 2014 at 11:35 PM, Terence Martin <walts....@gmail.com>
wrote:

> I'm noticing now that it always seems to act as through there was a
> keep-alive header in the original request, even if there was not. I'm not
> sure if that's a big deal or not, but there is a should_keep_alive()
> internal function that looks like it's trying to decide if the connection
> should be kept alive or not.
>
> Incidentally, that function seems to think that only connection with an
> endpoint type of EP_USER should be allowed to be kept alive, but when it's
> called in close_local_endpoint(), it checks to see if the endpoint type is
> EP_USER or EP_FILE.
>
>
>
>
> On Thursday, June 12, 2014 10:25:21 AM UTC-7, Sergey Lyubka wrote:
>
>> Yeah that's how connection param should be used, you're correct. Don't
>> forget to set it back to null after dealloc. Also dealloc at mgclose to
>> avoid leaks.
>> On Jun 12, 2014 6:19 PM, "Terence Martin" <walt...@gmail.com> wrote:
>>
>>> Indeed now both types of queries are treated the same. The diff on that
>>> is where I traced things to yesterday, even.
>>>
>>> In my simple example code, I'm using connection_param to hold the
>>> structure that indicates what sort of processing I'm waiting for completion
>>> on.
>>>
>>> So in this case, I think it's safest to dealloc and null out that
>>> parameter once the MG_POLL is indicating that it's done. In the best case,
>>> the connection is used for simple queries until it closes, and in the worst
>>> case it might get re-used for a second long-lived query that would
>>> overwrite connection_param and leak it.
>>>
>>> Many thanks for the fix and the clarification on intended behaviour.
>>>
>>> On Thursday, June 12, 2014 2:59:34 AM UTC-7, Sergey Lyubka wrote:
>>>>
>>>> I've made a quick test and realized that long-lived connections are
>>>> closed.
>>>> Pushed https://github.com/cesanta/mongoose/commit/3cec6f6745
>>>> ea9714bc77ff332072beea279bfe82
>>>> Now they're kept alive.
>>>> Please verify.
>>>>
>>>>
>>>> On Thu, Jun 12, 2014 at 10:42 AM, Sergey Lyubka <val...@gmail.com>
>>>> wrote:
>>>>
>>>>> Hi Terence,
>>>>> I expect the connection to be kept alive in both cases (short-lived
>>>>> and long-lived requests).
>>>>> What does your handler return on MG_POLL event?
>>>>>
>>>>>
>>>>> On Wed, Jun 11, 2014 at 10:15 PM, Terence Martin <walt...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> I have a question regarding keep-alive connections and the MG_CLOSE
>>>>>> event, in particular in how they interact if you're using the
>>>>>> connection_param field in the mg_connection structure.
>>>>>>
>>>>>> The documentation for MG_CLOSE says:
>>>>>>
>>>>>> MG_CLOSE is sent when the connection is closed. This event is used
>>>>>>> to cleanup per-connection state stored in connection_param if it
>>>>>>> was allocated.
>>>>>>
>>>>>>
>>>>>> However, I have noticed that in the case of a keep-alive connection,
>>>>>> MG_CLOSE doesn't trigger until the idle timeout is reached (which makes
>>>>>> sense). This would mean that if this connection was a keep-alive and the
>>>>>> client issued a second request, the connection_param would still be set 
>>>>>> as
>>>>>> for the previous connection.
>>>>>>
>>>>>> In my case I'm having MG_REQUEST start a query and return MG_MORE,
>>>>>> then using MG_POLL to check if it's complete yet and dispatch away the
>>>>>> results if they are. To be safe I'm discarding the structure right in the
>>>>>> MG_POLL once it's no longer needed and nulling the field out to make sure
>>>>>> that if this connection was kept-alive, the next MG_POLL wouldn't use the
>>>>>> structure inappropriately.
>>>>>>
>>>>>> In my limited testing it looked like simple requests (in which
>>>>>> MG_REQUEST returns MG_TRUE) will stay alive, while connections in which
>>>>>> MG_REQUEST returns MG_MORE get MG_CLOSE invoked as soon as the data is
>>>>>> transmitted. However, I'm not sure if that's by design, a fluke, or my 
>>>>>> test
>>>>>> is doing something wonky.
>>>>>>
>>>>>> What's the best principles approach to this?
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "mongoose-users" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to mongoose-user...@googlegroups.com.
>>>>>> To post to this group, send email to mongoos...@googlegroups.com.
>>>>>> Visit this group at http://groups.google.com/group/mongoose-users.
>>>>>> For more options, visit https://groups.google.com/d/optout.
>>>>>>
>>>>>
>>>>>
>>>>  --
>>> You received this message because you are subscribed to the Google
>>> Groups "mongoose-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to mongoose-user...@googlegroups.com.
>>> To post to this group, send email to mongoos...@googlegroups.com.
>>> Visit this group at http://groups.google.com/group/mongoose-users.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>  --
> You received this message because you are subscribed to the Google Groups
> "mongoose-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to mongoose-users+unsubscr...@googlegroups.com.
> To post to this group, send email to mongoose-users@googlegroups.com.
> Visit this group at http://groups.google.com/group/mongoose-users.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"mongoose-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to mongoose-users+unsubscr...@googlegroups.com.
To post to this group, send email to mongoose-users@googlegroups.com.
Visit this group at http://groups.google.com/group/mongoose-users.
For more options, visit https://groups.google.com/d/optout.

Reply via email to