|
|
|
@ -502,9 +502,9 @@ do_connect:;
|
|
|
|
|
return ret;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int accept(int fd, struct sockaddr *addr, socklen_t *addrlen) {
|
|
|
|
|
int accept4(int fd, struct sockaddr *addr, socklen_t *addrlen, int flags) {
|
|
|
|
|
const char *err;
|
|
|
|
|
int (*real_accept)(int, struct sockaddr *, socklen_t *) = dlsym(RTLD_NEXT, "accept");
|
|
|
|
|
int (*real_accept4)(int, struct sockaddr *, socklen_t *, int) = dlsym(RTLD_NEXT, "accept4");
|
|
|
|
|
|
|
|
|
|
err = "fd out of bounds";
|
|
|
|
|
if (fd < 0 || fd >= MAX_SOCKETS)
|
|
|
|
@ -523,7 +523,7 @@ do_accept_warn:
|
|
|
|
|
do_accept:;
|
|
|
|
|
struct sockaddr_un sun;
|
|
|
|
|
socklen_t sun_len = sizeof(sun);
|
|
|
|
|
int new_fd = real_accept(fd, (struct sockaddr *) &sun, &sun_len);
|
|
|
|
|
int new_fd = real_accept4(fd, (struct sockaddr *) &sun, &sun_len, flags);
|
|
|
|
|
if (new_fd == -1)
|
|
|
|
|
return -1;
|
|
|
|
|
if (new_fd < 0 || new_fd >= MAX_SOCKETS || real_sockets[new_fd].open) {
|
|
|
|
@ -554,6 +554,10 @@ do_accept:;
|
|
|
|
|
return new_fd;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int accept(int fd, struct sockaddr *addr, socklen_t *addrlen) {
|
|
|
|
|
return accept4(fd, addr, addrlen, 0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int dup(int fd) {
|
|
|
|
|
int (*real_dup)(int) = dlsym(RTLD_NEXT, "dup");
|
|
|
|
|
int ret = real_dup(fd);
|
|
|
|
|