[erlang-questions] fd_server does not work with R11B-4

Torbjorn Tornkvist tobbe@REDACTED
Wed May 9 10:50:09 CEST 2007


Nice, but I can't even load the driver, see below.
I'm running the the version that lives in jungerl.
Strange...

--Tobbe

Mikael Magnusson wrote:
> Mikael Magnusson wrote:
>> Torbjorn Tornkvist wrote:
>>> Hi,
>>>
>>> The fd_server (see jungerl) does not work with R11B-4.
>>> I suspect it has to do with the following (excerpt from
>>> the release notes):
>>>
>>>> http://www.erlang.org/download/otp_src_R11B-4.readme
>>>>
>>>>    OTP-6452  In the documentation of the driver entry field....
>>> This is most unfortunate since fd_server is important for Yaws
>>> users that want to open up privileged ports. The following is
>>> what happends:
>>>
>>> )1> fdsrv:start().
>>> {error,{error,{{error,driver_incorrect_version},
>>>                 "/home/tobbe/blaha/lib/fd_server/priv"}}}
>>>
>>> A more complete testcase could be:
>>>
>>> fdsrv:start().
>>> {ok, Fd} = fdsrv:bind_socket(tcp, {{0,0,0,0}, 81}).
>>> gen_tcp:listen(81,[{fd, Fd}]).
>>>
>>> I've heard rumors that fd_server may be included in a future OTP 
>>> releases. Could that be true ?
>>>
>>> Anyway, if anyone comes up with an updated driver, it would be
>>> mighty good if it could be put into jungerl.
>>>
>>> Cheers, Tobbe
>>> (Ps. Btw R11B-4 can't be built unless --disable-hipe is used [Debian 4. 
>>> 0,Gentoo])
>>>
>> It looks like inet_db:fdopen is at fault. The Family and Fd arguments 
>> are swapped in the call to prim_inet:fdopen.
> 
> Correction, it's inet:fdopen, and the following patch solves the problem:
> 
> --- inet.erl.orig       2007-05-09 10:19:50.000000000 +0200
> +++ inet.erl    2007-05-09 10:17:59.000000000 +0200
> @@ -749,7 +749,7 @@
>       fdopen(Fd, Opts, Protocol, Family, Module).
> 
>   fdopen(Fd, Opts, Protocol, Family, Module) ->
> -    case prim_inet:fdopen(Protocol, Family, Fd) of
> +    case prim_inet:fdopen(Protocol, Fd, Family) of
>          {ok, S} ->
>              case prim_inet:setopts(S, Opts) of
>                  ok ->
> 
> Output from patched R11B-4:
> 
> 1> fdsrv:start().
> {ok,<0.33.0>}
> 2> {ok, Fd} = fdsrv:bind_socket(tcp, {{0,0,0,0}, 81}).
> {ok,9}
> 3> gen_tcp:listen(81,[{fd, Fd}]).
> {ok,#Port<0.107>}
> 4>
> 
> Mikael




More information about the erlang-questions mailing list