コード例 #1
0
ファイル: mssl.c プロジェクト: GraseHotspot/coova-chilli
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;
}
コード例 #2
0
ファイル: tcp.c プロジェクト: dancahill/nsp
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__
}