MCPcopy Create free account
hub / github.com/acl-dev/acl / sock_read

Method sock_read

lib_acl_cpp/src/stream/mbedtls_io.cpp:482–541  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

480}
481
482int 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;

Callers

nothing calls this directly

Calls 4

acl_readableFunction · 0.85
acl_set_errorFunction · 0.85
acl_socket_readFunction · 0.85
acl_last_errorFunction · 0.85

Tested by

no test coverage detected