X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=src%2Fliboping.c;h=fc9ed65c63198f081a9e5ecb2b7dc2ab474177a9;hb=4442437848f4d07b91c8ae1512b562299a3e6070;hp=f8c5bfbf6a6c251f5ac2f91ec4e20acd2d64949f;hpb=8f47022a866853da6477272b2c69855a1e2cff13;p=liboping.git diff --git a/src/liboping.c b/src/liboping.c index f8c5bfb..fc9ed65 100644 --- a/src/liboping.c +++ b/src/liboping.c @@ -694,6 +694,7 @@ static int ping_receive_all (pingobj_t *obj) if (!timerisset (ptr->timer)) continue; + assert (ptr->fd < FD_SETSIZE); FD_SET (ptr->fd, &read_fds); FD_SET (ptr->fd, &err_fds); num_fds++; @@ -1481,6 +1482,16 @@ int ping_host_add (pingobj_t *obj, const char *host) ping_set_errno (obj, errno); continue; } + else if (ph->fd >= FD_SETSIZE) + { + dprintf("socket(2) returned file descriptor %d, which is above the file " + "descriptor limit for select(2) (FD_SETSIZE = %d)\n", + ph->fd, FD_SETSIZE); + close(ph->fd); + ph->fd = -1; + ping_set_errno(obj, EMFILE); + continue; + } if (obj->srcaddr != NULL) {