OPEN_MAX -> sysconf

This commit is contained in:
Abramo Bagnara 2000-11-30 07:46:01 +00:00
parent 4ac3fac092
commit 3260487fe2

View file

@ -142,7 +142,7 @@ int send_fd(int socket, void *data, size_t len, int fd)
return ret; return ret;
} }
struct pollfd pollfds[OPEN_MAX]; struct pollfd *pollfds;
unsigned int pollfds_count = 0; unsigned int pollfds_count = 0;
typedef struct waiter waiter_t; typedef struct waiter waiter_t;
typedef int (*waiter_handler_t)(waiter_t *waiter, unsigned short events); typedef int (*waiter_handler_t)(waiter_t *waiter, unsigned short events);
@ -151,7 +151,7 @@ struct waiter {
void *private_data; void *private_data;
waiter_handler_t handler; waiter_handler_t handler;
}; };
waiter_t waiters[OPEN_MAX]; waiter_t *waiters;
void add_waiter(int fd, unsigned short events, waiter_handler_t handler, void add_waiter(int fd, unsigned short events, waiter_handler_t handler,
void *data) void *data)
@ -839,22 +839,33 @@ int server(char *sockname, int port)
{ {
int err; int err;
unsigned int k; unsigned int k;
long open_max;
int result;
if (!sockname && port < 0) if (!sockname && port < 0)
return -EINVAL; return -EINVAL;
open_max = sysconf(_SC_OPEN_MAX);
if (open_max < 0) {
result = -errno;
SYSERROR("sysconf failed");
return result;
}
pollfds = calloc(open_max, sizeof(*pollfds));
waiters = calloc(open_max, sizeof(*waiters));
if (sockname) { if (sockname) {
int sock = make_local_socket(sockname); int sock = make_local_socket(sockname);
if (sock < 0) if (sock < 0)
return sock; return sock;
if (fcntl(sock, F_SETFL, O_NONBLOCK) < 0) { if (fcntl(sock, F_SETFL, O_NONBLOCK) < 0) {
int result = -errno; result = -errno;
SYSERROR("fcntl O_NONBLOCK failed"); SYSERROR("fcntl O_NONBLOCK failed");
return result; goto _end;
} }
if (listen(sock, 4) < 0) { if (listen(sock, 4) < 0) {
int result = -errno; result = -errno;
SYSERROR("listen failed"); SYSERROR("listen failed");
return result; goto _end;
} }
add_waiter(sock, POLLIN, local_handler, NULL); add_waiter(sock, POLLIN, local_handler, NULL);
} }
@ -863,14 +874,14 @@ int server(char *sockname, int port)
if (sock < 0) if (sock < 0)
return sock; return sock;
if (fcntl(sock, F_SETFL, O_NONBLOCK) < 0) { if (fcntl(sock, F_SETFL, O_NONBLOCK) < 0) {
int result = -errno; result = -errno;
SYSERROR("fcntl failed"); SYSERROR("fcntl failed");
return result; goto _end;
} }
if (listen(sock, 4) < 0) { if (listen(sock, 4) < 0) {
int result = -errno; result = -errno;
SYSERROR("listen failed"); SYSERROR("listen failed");
return result; goto _end;
} }
add_waiter(sock, POLLIN, inet_handler, NULL); add_waiter(sock, POLLIN, inet_handler, NULL);
} }
@ -900,7 +911,10 @@ int server(char *sockname, int port)
} }
} }
} }
return 0; _end:
free(pollfds);
free(waiters);
return result;
} }