static int setup_command_socket_or_die(void)
{
- int ret;
+ int ret, socket_fd;
char *socket_name = conf.afs_socket_arg;
struct sockaddr_un unix_addr;
PARA_EMERG_LOG("%s: %s\n", PARA_STRERROR(-ret), socket_name);
exit(EXIT_FAILURE);
}
- if (listen(ret , 5) < 0) {
- PARA_EMERG_LOG("%s", "can not listen on socket\n");
+ socket_fd = ret;
+ if (listen(socket_fd , 5) < 0) {
+ PARA_EMERG_LOG("can not listen on socket\n");
exit(EXIT_FAILURE);
}
- PARA_INFO_LOG("listening on command socket %s (fd %d)\n", socket_name,
- ret);
- return ret;
+ ret = mark_fd_nonblock(socket_fd);
+ if (ret < 0) {
+ close(socket_fd);
+ return ret;
+ }
+ PARA_INFO_LOG("listening on socket %s (fd %d)\n", socket_name, ret);
+ return socket_fd;
}
static void close_afs_tables(void)
struct command_task *ct = t->private_data;
struct sockaddr_un unix_addr;
struct afs_client *client, *tmp;
-
+ int fd;
if (FD_ISSET(server_socket, &s->rfds))
execute_server_command();
PARA_NOTICE_LOG("%s\n", PARA_STRERROR(-t->ret));
goto out;
}
+ fd = t->ret;
+ t->ret = mark_fd_nonblock(fd);
+ if (t->ret < 0) {
+ PARA_NOTICE_LOG("%s\n", PARA_STRERROR(-t->ret));
+ close(fd);
+ goto out;
+ }
client = para_malloc(sizeof(*client));
- client->fd = t->ret;
+ client->fd = fd;
client->connect_time = *now;
para_list_add(&client->node, &afs_client_list);
out: