| 480 | } |
| 481 | |
| 482 | int mbedtls_io::sock_read(void *ctx, unsigned char *buf, size_t len) |
| 483 | { |
| 484 | #ifdef HAS_MBEDTLS |
| 485 | mbedtls_io* io = (mbedtls_io*) ctx; |
| 486 | ACL_VSTREAM* vs = io->stream_; |
| 487 | ACL_SOCKET fd = ACL_VSTREAM_SOCK(vs); |
| 488 | |
| 489 | //logger(">>>non_block: %s, sys_ready: %s", |
| 490 | // io->nblock_ ? "yes" : "no", |
| 491 | // vs->read_ready ? "yes":"no"); |
| 492 | |
| 493 | // ������ģʽ�£���� read_ready ��־λΪ 0����˵���п��� |
| 494 | // ���� IO �����������ݣ�Ϊ�˷�ֹ�ö����̱����������Դ˴�ֱ�� |
| 495 | // ���ظ� mbedtls ����֮�ȴ��´ζ����´ζ����������¼����津���� |
| 496 | // ���������ŵ����ڷ�����ģʽ�¼�ʹ����û������Ϊ������״̬ |
| 497 | // Ҳ���������̣߳���ȱ�����������¼�ѭ�������Ĵ��� |
| 498 | if (io->nblock_ && vs->read_ready == 0) { |
| 499 | int ret = acl_readable(fd); |
| 500 | if (ret == -1) { |
| 501 | return MBEDTLS_ERR_NET_RECV_FAILED; |
| 502 | } else if (ret == 0) { |
| 503 | // �����ڴ˴�����ϵͳ�� errno �ţ��˴���ģ���� |
| 504 | // ������������ |
| 505 | acl_set_error(ACL_EWOULDBLOCK); |
| 506 | return MBEDTLS_ERR_SSL_WANT_READ; |
| 507 | } |
| 508 | // else: ret == 1 |
| 509 | } |
| 510 | |
| 511 | // acl_socket_read �ڲ������ vs->read_ready ��־λ�����Ƿ���Ҫ |
| 512 | // �Գ�ʱ��ʽ�����ݣ�ͬʱ���Զ���� vs->read_ready ��־λ |
| 513 | int ret = acl_socket_read(fd, buf, len, vs->rw_timeout, vs, NULL); |
| 514 | if (ret < 0) { |
| 515 | int errnum = acl_last_error(); |
| 516 | |
| 517 | if (errnum == ACL_EINTR) { |
| 518 | return MBEDTLS_ERR_SSL_WANT_READ; |
| 519 | } else if (errnum == ACL_EWOULDBLOCK) { |
| 520 | return MBEDTLS_ERR_SSL_WANT_READ; |
| 521 | #if ACL_EWOULDBLOCK != ACL_EAGAIN |
| 522 | } else if (errnum == ACL_EAGAIN) { |
| 523 | return MBEDTLS_ERR_SSL_WANT_READ; |
| 524 | #endif |
| 525 | } else if (errnum == ACL_ECONNRESET || errno == EPIPE) { |
| 526 | return MBEDTLS_ERR_NET_CONN_RESET; |
| 527 | } else { |
| 528 | return MBEDTLS_ERR_NET_RECV_FAILED; |
| 529 | } |
| 530 | } |
| 531 | |
| 532 | |
| 533 | return ret; |
| 534 | #else |
| 535 | (void) ctx; |
| 536 | (void) buf; |
| 537 | (void) len; |
| 538 | logger_error("HAS_MBEDTLS not defined!"); |
| 539 | return -1; |
nothing calls this directly
no test coverage detected