- DoWrite(user, session);
- }
- }
-
- if (rv == 0 || !session->outbuf.empty())
- ServerInstance->SE->WantWrite(user);
-
- return rv;
- }
-
- int DoWrite(StreamSocket* user, issl_session* session)
- {
- if (!session->outbuf.size())
- return -1;
-
- int ret = SSL_write(session->sess, session->outbuf.data(), session->outbuf.size());
-
- if (ret == 0)
- {
- CloseSession(session);
- return 0;
- }
- else if (ret < 0)
- {
- int err = SSL_get_error(session->sess, ret);
-
- if (err == SSL_ERROR_WANT_WRITE)
- {
- session->wstat = ISSL_WRITE;
- ServerInstance->SE->WantWrite(user);
- return -1;
- }
- else if (err == SSL_ERROR_WANT_READ)
- {
- session->wstat = ISSL_READ;
- return -1;
- }
- else
- {
- CloseSession(session);
+ buffer = buffer.substr(ret);
+ ServerInstance->SE->ChangeEventMask(user, FD_WANT_SINGLE_WRITE);