_PUBLIC_ int swrap_listen(int s, int backlog) { int ret; struct socket_info *si = find_socket_info(s); if (!si) { return real_listen(s, backlog); } ret = real_listen(s, backlog); return ret; }
int listen(int fd, int backlog) { static int (*real_listen)(int, int) = NULL; int ret = 0; struct fsocket_ioctl_arg arg; if (!real_listen) real_listen = dlsym(RTLD_NEXT, "listen"); if (fsocket_channel_fd >= 0) { arg.fd = fd; arg.backlog = backlog; if (!fsocket_fd_set[fd]) fsocket_fd_set[fd] = 1; ret = ioctl(fsocket_channel_fd, FSOCKET_IOC_LISTEN, &arg); if (ret < 0) { FSOCKET_ERR("FSOCKET:Listen failed!\n"); fsocket_fd_set[fd] = 0; } else { arg.fd = fd; arg.op.spawn_op.cpu = -1; if (ioctl(fsocket_channel_fd, FSOCKET_IOC_SPAWN_LISTEN, &arg) < 0) { FSOCKET_ERR("FSOCKET: spawn failed!\n"); } } } else { ret = real_listen(fd, backlog); } return ret; }
int listen(int sockfd, int backlog) throw() { int retval; print_trace ("%*slisten(%d, %d)=...\n", indent, "", sockfd, backlog); indent+=2; /* call the real listen function */ retval = real_listen (sockfd, backlog); indent-=2; print_trace ("%*slisten(%d, %d)=%d\n", indent, "", sockfd, backlog, retval); return retval; }