[prev in list] [next in list] [prev in thread] [next in thread] 

List:       apache-httpd-dev
Subject:    Re: [RFC] Adding UDP support to server
From:       Issac Goldstand <margol () beamartyr ! net>
Date:       2007-02-25 8:52:01
Message-ID: 45E14E31.7000204 () beamartyr ! net
[Download RAW message or body]

Jean-Frederic wrote:
> On Tue, 2007-02-20 at 15:14 +0200, Issac Goldstand wrote:
>> I'm working on a protocol module for Apache 2.2 and ran into the lack of
>> UDP support in httpd.  I'd like to try and remedy the situation in a
>> manner best suited for merging to trunk + backporting where possible.  I
>> know that people have asked about it in the past, and if we really want
>> to be "d", we need support beyond TCP/SOCK_STREAM sockets.
> 
> Having UDP support doesn't sound a bad idea.
> 
> You don't need to change all the worker stuff. Just set accept_funct =
> to a dummy fonction for UPD sockets in make_sock().

That's possible, but we'd need to muck with the MPMs anyway.  Although I
neglected to include it in my previous post, not all MPMs use an
accept_func and those that don't also need to be modified to provide the
option of not calling apr_socket_accept [or alternatively, have the MPMs
silently ignore a EOPNOTSUPP error returned from the underlying accept()
call, if that's portable and deemed "safe"]

> You don't need to do anything in  dummy_connection() when using a UPD
> socket. 

In general, I think the entire accept_func is not currently implemented
so well; the idea is to provide a flexible way to control how a TCP
connection is accept()ed, yet each MPM that uses it pretty much
hardcodes its use anyway (with the single exception of per-child on
trunk, which changes it at run-time).

If we're looking to do the UDP thing right, I'd suggest changing the way
accept_func works to be either an APR_OPTIONAL_FN or, better yet, an
AP_HOOK, and for MPMs to exclusively call the socket's accept_func (in
either case, the default TCP accept_func would just wrap
apr_socket_accept - it could also handle non-TCP functions by not
calling apr_socket_accept if apr_socket_type_get != SOCK_STREAM).

  Issac
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic