Error: failed to create socket

Charles Trois yellowdog-general@lists.terrasoftsolutions.com
Mon Sep 8 13:39:01 2003


le 8/09/03 20:01, yellowdog-general-request@lists.terrasoftsolutions.com =E0
yellowdog-general-request@lists.terrasoftsolutions.com a =E9crit=A0:

> Message: 12
> Date: Mon, 08 Sep 2003 13:36:02 +0200
> Subject: Re:  Error: failed to create socket
> From: Charles Trois <charles.trois@wanadoo.fr>
> To: <yellowdog-general@lists.terrasoftsolutions.com>
> Cc: Bill Fink <billfink@mindspring.com>
> Reply-To: yellowdog-general@lists.terrasoftsolutions.com
>=20
> le 7/09/03 20:01, yellowdog-general-request@lists.terrasoftsolutions.com =
=3DE0
> yellowdog-general-request@lists.terrasoftsolutions.com a =3DE9crit=3DA0:
>=20
>> =3D20
>> Message: 7
>> Date: Sun, 07 Sep 2003 18:50:40 +0200
>> Subject:Re:  Error: failed to create socket
>> From: Charles Trois <charles.trois@wanadoo.fr>
>> To: <yellowdog-general@lists.terrasoftsolutions.com>
>> Cc: Bill Fink <billfink@mindspring.com>
>> Reply-To: yellowdog-general@lists.terrasoftsolutions.com
>> =3D20
>> le 6/09/03 19:25, yellowdog-general-request@lists.terrasoftsolutions.com=
 =3D
> =3D3DE0
>> yellowdog-general-request@lists.terrasoftsolutions.com a =3D3DE9crit=3D3DA0:
>> =3D20
>>> Hi Charles,
>>> =3D3D20
>>> This problem sounded familiar.  I believe I've encountered something
>>> similar with a different application.
>>> =3D3D20
>>> I downloaded speedbundle-1.0.tar.gz, unpacked it and searched for
>>> the string "failed to create socket":
>>> =3D3D20
>>> gwiz% grep -r 'failed to create socket' speedbundle-1.0
>>> speedbundle-1.0/ppp/pppd/plugins/pppoatm.c:             fatal("failed t=
o
>>> create socket: %m");
>>> =3D3D20
>>> I then edited the pppoatm.c file and searched again for the string
>>> "failed to create socket".  This was the relevant section of code:
>>> =3D3D20
>>> fd =3D3D3D socket(AF_ATMPVC, SOCK_DGRAM, 0);
>>> if (fd < 0)
>>> fatal("failed to create socket: %m");
>>> =3D3D20
>>> The last argument to socket() is the protocol.  It used to be OK to
>>> just pass a 0 for the protocol argument, but the kernel is now more
>>> strict about this.  A value of 0 for protocol is actually PF_UNSPEC
>>> or protocol family unspecified.
>>> =3D3D20
>>> I believe it should be sufficient to just change the protocol argument
>>> of 0 to PF_ATMPVC.
>>> =3D3D20
>> =3D20
>> Alas no; still the same error. Any further ideas?
>=20
> Hello Bill,=3D20
>=20
> I think I have made a little progress.
>=20
> I learned from man 7 ip that the function
> socket(AF_ATMPVC, SOCK_DGRAM, protocol) creates a udp_socket, for which t=
he
> only valid values of protocol are 0 and IPPROTO_UDP.
>=20
> As I know that 0 doesn't work, I tried the other value; but then the
> compiler gives the error "undeclared".
>=20
> Do you think that the solution lies there? If so, where and how could I
> introduce a declaration of IPPROTO_UDP?

I would like to add this to my previous message above:

I have gone a further step, in that I have found that IPPROTO_UDP is in
/usr/include/netinet/inet.h.

I therefore added in pppoatm.c the line

#include <netinet/in.h>

and I got a clean compilation.

However, when running "pppd call speedtch", I got again the error "failed t=
o
create socket: Address family not supported by protocol".

I am quite puzzled and wondering what is compatible with what.

Does anyone know that? Might I have to touch up the kernel?

Charles