-static struct blocker *blockers;
-int plex;
-
-static int block(int fd, int ev, time_t to)
-{
- struct blocker *bl;
- int rv;
-
- omalloc(bl);
- bl->fd = fd;
- bl->ev = ev;
- if(to > 0)
- bl->to = time(NULL) + to;
- bl->th = current;
- bl->n = blockers;
- if(blockers)
- blockers->p = bl;
- blockers = bl;
- rv = yield();
- if(bl->n)
- bl->n->p = bl->p;
- if(bl->p)
- bl->p->n = bl->n;
- if(bl == blockers)
- blockers = bl->n;
- return(rv);
-}
-
-static int listensock4(int port)
-{
- struct sockaddr_in name;
- int fd;
- int valbuf;
-
- memset(&name, 0, sizeof(name));
- name.sin_family = AF_INET;
- name.sin_port = htons(port);
- if((fd = socket(PF_INET, SOCK_STREAM, 0)) < 0)
- return(-1);
- valbuf = 1;
- setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &valbuf, sizeof(valbuf));
- if(bind(fd, (struct sockaddr *)&name, sizeof(name))) {
- close(fd);
- return(-1);
- }
- if(listen(fd, 16) < 0) {
- close(fd);
- return(-1);
- }
- return(fd);
-}
-
-static int listensock6(int port)