Commit 1d562dff authored by Guido van Rossum's avatar Guido van Rossum

socketmodule.c: added socket.fromfd(fd, family, type, [proto]);

converted socket() to use of getargs().
parent 25593e2a
...@@ -933,15 +933,12 @@ socket_socket(self, args) ...@@ -933,15 +933,12 @@ 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)) {
return NULL; err_clear();
} if (!getargs(args, "(iii)", &family, &type, &proto))
else {
if (!getintintarg(args, &family, &type))
return NULL; return NULL;
proto = 0;
} }
BGN_SAVE BGN_SAVE
fd = socket(family, type, proto); fd = socket(family, type, proto);
...@@ -960,6 +957,32 @@ socket_socket(self, args) ...@@ -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[] = { ...@@ -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 */
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment