Using Lwip with fdopen

Norman Feske norman.feske at ...1...
Fri Apr 18 13:20:10 CEST 2014


Hello,

On 04/18/2014 10:03 AM, Mhamad Hmad wrote:
> Hi, 
> I built small test server application using lwip stack  to work like
> echo server . 
> i tried to associate the socket with a stream by using fdopen but it
> failed . 
> when i using the mode "r" or "r+" it give invalid parameter error,
> in the same time when i try to write on the file descriptor returned by
> lwip_accept  it is write to the client . 

I am not proficient with using 'fdopen' on Genode but I see a glaring
problem in your code:

You are mixing the lwip_* functions with libc functions to which you
pass lwIP socket descriptors as arguments. The problem is that the C
runtime (which provides 'fdopen') is not aware of any file descriptors
of the lwIP library. The lwIP socket descriptors and libc's file
descriptors are different name spaces.

Fortunately there is a solution to bridge the gap between lwIP and the C
runtime. Using the 'libc_lwip_nic_dhcp' libc plugin, you can use the
normal BSD socket interface instead of the lwIP interface. So instead of
'lwip_accept', just use 'accept'. The pluging wraps the 'lwip_*'
functions and creates a proper libc file descriptor for each lwIP socket
descriptor. The descriptors returned from those functions are consistent
with the name space of the C runtime. I.e., they can be specified as
arguments to 'select', and hopefully also to 'fdopen'.

Best regards
Norman

-- 
Dr.-Ing. Norman Feske
Genode Labs

http://www.genode-labs.com · http://genode.org

Genode Labs GmbH · Amtsgericht Dresden · HRB 28424 · Sitz Dresden
Geschäftsführer: Dr.-Ing. Norman Feske, Christian Helmuth




More information about the users mailing list