undocumented inet (and gen_tcp)

Matthias Lang matthias@REDACTED
Wed Sep 11 13:56:01 CEST 2002


Hi,

This should be useful for others. Inet (and related stuff,
e.g. gen_tcp) have many undocumented features. Some of these are
really useful:

    getopts/2   (lets you inspect the options in setopts)
    options/0   (gives a complete list of the options for
                 get and setopts. There are 22 in R8B-2, the
                 inet manpage documents only 10 of them.)
    getif/0     (list of network interfaces)
    getiflist/0 (ditto)
    ifget/2     (information about an interface, e.g. IP addr)
    ifset/2     
    getstat/2   (call stats/0 for the possible atoms)

(Background: Normal gen_tcp behaviour when the remote receiver can't
keep up is to block on send/2. Sometimes this is NOT what I want,
sometimes I want to kill the 'full' socket rather than wait forever.

The dumb solution which does something vaguely similar to what I want:

   Write code like this:

    {ok, Tref} = timer:apply_after(500, erlang, exit, [self(), kill]),
    gen_tcp:send(S, Data),
    timer:cancel(Tref).

The nice, but undocumented, solution which does exactly what I want:

    gen_tcp:connect(Host, Port, [{send_timeout, 0}])

)

Question for Tony: what's that (unimplemented) 'pushf' stuff intended for?

Matthias



More information about the erlang-questions mailing list