@@ -87,6 +87,13 @@ pmix_status_t pmix_start_listening(pmix_listener_t *lt)
87
87
printf ("%s:%d socket() failed\n" , __FILE__ , __LINE__ );
88
88
return PMIX_ERROR ;
89
89
}
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
+
90
97
91
98
92
99
addrlen = sizeof (struct sockaddr_un );
@@ -296,8 +303,17 @@ static void* listen_thread(void *obj)
296
303
PMIX_RELEASE (pending_connection );
297
304
if (pmix_socket_errno != EAGAIN ||
298
305
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 ) {
300
309
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 ;
301
317
} else {
302
318
pmix_output (0 , "listen_thread: accept() failed: %s (%d)." ,
303
319
strerror (pmix_socket_errno ), pmix_socket_errno );
0 commit comments