int SSL_write(SSL *ssl, char *buf, int len) { int rc; writeMore: rc = _ssl_write(ssl, buf, len); if (rc <= 0) { if (rc < 0) { return rc; } goto writeMore; } return rc; }
int tcp_send(nsp_state *N, TCP_SOCKET *socket, const char *buffer, int len, int flags) { #define __FN__ __FILE__ ":tcp_send()" int rc; if (socket->socket == -1) return -1; if (socket->want_close) { tcp_close(N, socket, 1); return -1; } if (socket->use_ssl) { #ifdef HAVE_SSL rc = _ssl_write(N, socket, buffer, len); #else rc = -1; #endif } else { rc = send(socket->socket, buffer, len, flags); } if (rc < 0) { #ifdef WIN32 return rc; #else if (errno == EWOULDBLOCK) { errno = 0; msleep(MAXWAIT); } else if (errno) { if (N->debug) n_warn(N, __FN__, "[%s:%d] %d%.100s", socket->RemoteAddr, socket->RemotePort, errno, strerror(errno)); errno = 0; } #endif } else if (rc == 0) { msleep(MAXWAIT); } else { socket->mtime = time(NULL); socket->bytes_out += rc; } return rc; #undef __FN__ }