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

Method send

lib_acl_cpp/src/stream/openssl_io.cpp:467–522  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

465}
466
467int openssl_io::send(const void* buf, size_t len)
468{
469#ifdef HAS_OPENSSL
470 size_t nbytes = 0;
471 char* ptr = (char*) buf;
472 int timeo = nblock_ ? 0 : this->stream_->rw_timeout;
473 ACL_SOCKET fd = ACL_VSTREAM_SOCK(this->stream_);
474 bool opt = conf_.is_sockopt_timeout();
475
476 while (len > 0) {
477 //time_t begin = time(NULL);
478 if (timeo > 0 && !opt && acl_write_wait(fd, timeo) < 0) {
479 //time_t end = time(NULL);
480 //logger_error("acl_write_wait error=%s, fd=%d, cost=%ld",
481 // last_serror(), (int) fd, (long) (end - begin));
482 return -1;
483 }
484
485 int ret = __ssl_write(ssl_, ptr, (int) len);
486 if (ret > 0) {
487 nbytes += ret;
488 ptr += ret;
489 len -= ret;
490
491 break;
492 }
493
494 if (nbytes > 0) {
495 break;
496 }
497
498 int err = __ssl_get_error(ssl_, ret);
499
500 if (err == SSL_ERROR_WANT_READ || err == SSL_ERROR_WANT_WRITE) {
501 if (nblock_ || opt) {
502 break;
503 }
504 } else {
505 // SSL_ERROR_ZERO_RETURN, SSL_ERROR_SYSCALL, others.
506
507 /*
508 if (ERR_peek_error() == 0) {
509 }
510 */
511 return -1;
512 }
513 }
514
515 return nbytes > 0 ? (int) nbytes : -1;
516#else
517 (void) buf;
518 (void) len;
519 logger_error("define HAS_OPENSSL first!");
520 return false;
521#endif
522}
523
524} // namespace acl

Callers

nothing calls this directly

Calls 1

acl_write_waitFunction · 0.85

Tested by

no test coverage detected