@@ -371,31 +371,18 @@ int mca_btl_tcp_endpoint_send(mca_btl_base_endpoint_t* btl_endpoint, mca_btl_tcp
371371
372372
373373/*
374- * A blocking send on a non-blocking socket. Used to send the small amount of connection
375- * information that identifies the endpoints endpoint.
374+ * A blocking send on a non-blocking socket. Used to send the small
375+ * amount of connection information that identifies the endpoints endpoint.
376376 */
377377static int
378378mca_btl_tcp_endpoint_send_blocking (mca_btl_base_endpoint_t * btl_endpoint ,
379- void * data , size_t size )
379+ const void * data , size_t size )
380380{
381- unsigned char * ptr = (unsigned char * )data ;
382- size_t cnt = 0 ;
383- while (cnt < size ) {
384- int retval = send (btl_endpoint -> endpoint_sd , (const char * )ptr + cnt , size - cnt , 0 );
385- if (retval < 0 ) {
386- if (opal_socket_errno != EINTR && opal_socket_errno != EAGAIN && opal_socket_errno != EWOULDBLOCK ) {
387- BTL_ERROR (("send(%d, %p, %lu/%lu) failed: %s (%d)" ,
388- btl_endpoint -> endpoint_sd , data , cnt , size ,
389- strerror (opal_socket_errno ), opal_socket_errno ));
390- btl_endpoint -> endpoint_state = MCA_BTL_TCP_FAILED ;
391- mca_btl_tcp_endpoint_close (btl_endpoint );
392- return -1 ;
393- }
394- continue ;
395- }
396- cnt += retval ;
381+ int ret = mca_btl_tcp_send_blocking (btl_endpoint -> endpoint_sd , data , size );
382+ if (ret < 0 ) {
383+ mca_btl_tcp_endpoint_close (btl_endpoint );
397384 }
398- return cnt ;
385+ return ret ;
399386}
400387
401388
@@ -573,31 +560,11 @@ static void mca_btl_tcp_endpoint_connected(mca_btl_base_endpoint_t* btl_endpoint
573560 */
574561static int mca_btl_tcp_endpoint_recv_blocking (mca_btl_base_endpoint_t * btl_endpoint , void * data , size_t size )
575562{
576- unsigned char * ptr = (unsigned char * )data ;
577- size_t cnt = 0 ;
578- while (cnt < size ) {
579- int retval = recv (btl_endpoint -> endpoint_sd , (char * )ptr + cnt , size - cnt , 0 );
580-
581- /* remote closed connection */
582- if (retval == 0 ) {
583- mca_btl_tcp_endpoint_close (btl_endpoint );
584- return cnt ;
585- }
586-
587- /* socket is non-blocking so handle errors */
588- if (retval < 0 ) {
589- if (opal_socket_errno != EINTR && opal_socket_errno != EAGAIN && opal_socket_errno != EWOULDBLOCK ) {
590- BTL_ERROR (("recv(%d, %lu/%lu) failed: %s (%d)" ,
591- btl_endpoint -> endpoint_sd , cnt , size , strerror (opal_socket_errno ), opal_socket_errno ));
592- btl_endpoint -> endpoint_state = MCA_BTL_TCP_FAILED ;
593- mca_btl_tcp_endpoint_close (btl_endpoint );
594- return -1 ;
595- }
596- continue ;
597- }
598- cnt += retval ;
563+ int ret = mca_btl_tcp_recv_blocking (btl_endpoint -> endpoint_sd , data , size );
564+ if (ret <= 0 ) {
565+ mca_btl_tcp_endpoint_close (btl_endpoint );
599566 }
600- return cnt ;
567+ return ret ;
601568}
602569
603570
0 commit comments