On Sun, Oct 5, 2008 at 3:46 PM, Gustavo Sverzut Barbieri
<[EMAIL PROTECTED]> wrote:
> On Sun, Oct 5, 2008 at 12:27 AM, Matt Barclay <[EMAIL PROTECTED]> wrote:
>> Hello,
>>
>> With this patch, ecore will have full UDP client/server support.
>> Tooling UDP into the framework wasn't the easiest thing in the world
>> because a UDP server has a single socket (i.e. file handle) that is
>> used to handle all clients, whereas a TCP server generates a new
>> socket for each client that encapsulates all the details of the
>> connection. So here's how I implemented it:
>>
>> UDP Server (Unicast and Multicast):
>> 1. When there is data on the socket, the callback uses recvfrom() to
>> read the datagram and client address (struct sockaddr_in)
>> 2. Create a new Ecore_Con_Client and save the client address
>> (sockaddr_in) details with the "data" field. Leave the "fd", "buf",
>> and "fd_handler" fields NULL.
>> 3. Create a new Ecore_Con_Event_Client_Data and save the datagram in
>> the "data" field, and the client in the "client" field
>> 4. ecore_con_client_send() is updated to check for a
>> client->server->type of ECORE_CON_REMOTE_UDP and use sendto() with
>> client->data as the destination instead of appending the buffer to
>> client->buf
>> 5. relevant portions of ecore_con_client_del() and
>> _ecore_con_event_client_data_free() are updated to ensure the client
>> and data memory are freed
>>
>> The use of recvfrom() and sendto() feels a little dirty to me, but I'm
>> not sure how else to preserve the client address so that packets can
>> be sent back to the client. AFAIK, there isn't any way to do an
>> accept() on a UDP socket such that a new file handle is created that
>> encapsulates the end points of the UDP socket. Would appreciate some
>> "enlightenment" on this topic if I'm wrong. ;)
>>
>> UDP Client support fits nicely into the framework as a new socket is
>> created each time ecore_con_server_connect() is called.
>>
>> A UDP Server example program is included with the patch, and examples
>> of multicast and UDP client support can be found in SVN:
>> TEST/orig/ecore/
> Looks good, but it was just an overview of the code, maybe someone
> will reply with more in-depth comments.
It meet the current code standard of ecore_con.
> As your complaing about recvfrom() and sendto(), I don't see any issue
> with that, udp requires us to do so. The best thing to do is to to
> make the ecore_con operate on callbacks ("virtuals") and have
> different implementations for each system, then you just have the
> "ifs" on the entry point, where you select the connection type, there
> you set the function pointers and use them directly next times.
As Arnaud is working on adding IPv6 support to ecore_con, more change
and cleanup are coming into it. So I don't think it's needed to put
this patch on hold, as change will come step by step inside ecore_con.
And if anything is broken, we will just fix it.
> One thing I noticed is that you leave trailing whitespaces on some
> lines, remove them before committing.
Yep, I removed them before committing the patch in svn.
--
Cedric BAIL
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
enlightenment-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel