@@ -87,6 +87,13 @@ pmix_status_t pmix_start_listening(pmix_listener_t *lt)
8787 printf ("%s:%d socket() failed\n" , __FILE__ , __LINE__ );
8888 return PMIX_ERROR ;
8989 }
90+ /* Set the socket to close-on-exec so that no children inherit
91+ * this FD */
92+ if (pmix_fd_set_cloexec (lt -> socket ) != PMIX_SUCCESS ) {
93+ CLOSE_THE_SOCKET (lt -> socket );
94+ return PMIX_ERROR ;
95+ }
96+
9097
9198
9299 addrlen = sizeof (struct sockaddr_un );
@@ -296,8 +303,17 @@ static void* listen_thread(void *obj)
296303 PMIX_RELEASE (pending_connection );
297304 if (pmix_socket_errno != EAGAIN ||
298305 pmix_socket_errno != EWOULDBLOCK ) {
299- if (EMFILE == pmix_socket_errno ) {
306+ if (EMFILE == pmix_socket_errno ||
307+ ENOBUFS == pmix_socket_errno ||
308+ ENOMEM == pmix_socket_errno ) {
300309 PMIX_ERROR_LOG (PMIX_ERR_OUT_OF_RESOURCE );
310+ } else if (EINVAL == pmix_socket_errno ||
311+ EINTR == pmix_socket_errno ) {
312+ /* race condition at finalize */
313+ goto done ;
314+ } else if (ECONNABORTED == pmix_socket_errno ) {
315+ /* they aborted the attempt */
316+ continue ;
301317 } else {
302318 pmix_output (0 , "listen_thread: accept() failed: %s (%d)." ,
303319 strerror (pmix_socket_errno ), pmix_socket_errno );
0 commit comments