socketmodule.c: added socket.fromfd(fd, family, type, [proto]);
converted socket() to use of getargs().
This commit is contained in:
parent
6209b97df4
commit
2a7178efe1
@ -933,16 +933,13 @@ socket_socket(self, args)
|
|||||||
object *args;
|
object *args;
|
||||||
{
|
{
|
||||||
sockobject *s;
|
sockobject *s;
|
||||||
int family, type, proto, fd;
|
int fd, family, type, proto;
|
||||||
if (args != NULL && is_tupleobject(args) && gettuplesize(args) == 3) {
|
proto = 0;
|
||||||
if (!getintintintarg(args, &family, &type, &proto))
|
if (!getargs(args, "(ii)", &family, &type)) {
|
||||||
|
err_clear();
|
||||||
|
if (!getargs(args, "(iii)", &family, &type, &proto))
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
if (!getintintarg(args, &family, &type))
|
|
||||||
return NULL;
|
|
||||||
proto = 0;
|
|
||||||
}
|
|
||||||
BGN_SAVE
|
BGN_SAVE
|
||||||
fd = socket(family, type, proto);
|
fd = socket(family, type, proto);
|
||||||
END_SAVE
|
END_SAVE
|
||||||
@ -960,6 +957,32 @@ socket_socket(self, args)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Create a socket object from a numeric file description.
|
||||||
|
Useful e.g. if stdin is a socket.
|
||||||
|
Additional arguments as for socket(). */
|
||||||
|
|
||||||
|
/*ARGSUSED*/
|
||||||
|
static object *
|
||||||
|
socket_fromfd(self, args)
|
||||||
|
object *self;
|
||||||
|
object *args;
|
||||||
|
{
|
||||||
|
sockobject *s;
|
||||||
|
int fd, family, type, proto;
|
||||||
|
proto = 0;
|
||||||
|
if (!getargs(args, "(iii)", &fd, &family, &type)) {
|
||||||
|
err_clear();
|
||||||
|
if (!getargs(args, "(iiii)", &fd, &family, &type, &proto))
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
s = newsockobject(fd, family, type, proto);
|
||||||
|
/* From now on, ignore SIGPIPE and let the error checking
|
||||||
|
do the work. */
|
||||||
|
(void) signal(SIGPIPE, SIG_IGN);
|
||||||
|
return (object *) s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* List of functions exported by this module. */
|
/* List of functions exported by this module. */
|
||||||
|
|
||||||
static struct methodlist socket_methods[] = {
|
static struct methodlist socket_methods[] = {
|
||||||
@ -967,6 +990,7 @@ static struct methodlist socket_methods[] = {
|
|||||||
{"gethostname", socket_gethostname},
|
{"gethostname", socket_gethostname},
|
||||||
{"getservbyname", socket_getservbyname},
|
{"getservbyname", socket_getservbyname},
|
||||||
{"socket", socket_socket},
|
{"socket", socket_socket},
|
||||||
|
{"fromfd", socket_fromfd},
|
||||||
{NULL, NULL} /* Sentinel */
|
{NULL, NULL} /* Sentinel */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user