/*************************************************************************** * Support functions for slurm_allocate_resources_blocking() ***************************************************************************/ static listen_t *_create_allocation_response_socket(char *interface_hostname) { listen_t *listen = NULL; uint16_t *ports; listen = xmalloc(sizeof(listen_t)); if ((ports = slurm_get_srun_port_range())) listen->fd = slurm_init_msg_engine_ports(ports); else listen->fd = slurm_init_msg_engine_port(0); if (listen->fd < 0) { error("slurm_init_msg_engine_port error %m"); return NULL; } if (slurm_get_stream_addr(listen->fd, &listen->address) < 0) { error("slurm_get_stream_addr error %m"); slurm_shutdown_msg_engine(listen->fd); return NULL; } listen->hostname = xstrdup(interface_hostname); /* FIXME - screw it! I can't seem to get the port number through slurm_* functions */ listen->port = ntohs(listen->address.sin_port); fd_set_nonblocking(listen->fd); return listen; }
/* Set up port to handle messages from slurmctld */ int slurmctld_msg_init(void) { slurm_addr_t slurm_address; uint16_t port; static int slurmctld_fd = -1; uint16_t *ports; if (slurmctld_fd >= 0) /* May set early for queued job allocation */ return slurmctld_fd; slurmctld_comm_addr.port = 0; if ((ports = slurm_get_srun_port_range())) slurmctld_fd = slurm_init_msg_engine_ports(ports); else slurmctld_fd = slurm_init_msg_engine_port(0); if (slurmctld_fd < 0) { error("slurm_init_msg_engine_port error %m"); exit(error_exit); } if (slurm_get_stream_addr(slurmctld_fd, &slurm_address) < 0) { error("slurm_get_stream_addr error %m"); exit(error_exit); } fd_set_nonblocking(slurmctld_fd); /* hostname is not set, so slurm_get_addr fails slurm_get_addr(&slurm_address, &port, hostname, sizeof(hostname)); */ port = ntohs(slurm_address.sin_port); slurmctld_comm_addr.port = port; debug2("srun PMI messages to port=%u", slurmctld_comm_addr.port); return slurmctld_fd; }