httpd-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From di...@covalent.net
Subject Fixing NO_WRIVEV
Date Thu, 02 May 2002 10:36:28 GMT

David,

Could you (or someone else) who is on a legitimate platform which does
not support writev() check if this is functional ?

Note that I also found I had to make the #ifdef/#if defined()s to make
things comply across the board.

I've tried both with and without SSL and with/without WRITEV on bsd and
solaris - but obviously 'faking' the four permutations.

Cheers,

Dw

Index: ab.c
===================================================================
RCS file: /home/cvs/apache-1.3/src/support/ab.c,v
retrieving revision 1.63
diff -c -3 -r1.63 ab.c
*** ab.c	1 May 2002 17:02:20 -0000	1.63
--- ab.c	2 May 2002 10:33:09 -0000
***************
*** 114,120 ****
    *		configure --your-other-options
    */

-
  #define VERSION "1.3d"

  /* -------------------------------------------------------------------- */
--- 114,119 ----
***************
*** 161,167 ****
  #endif				/* NO_APACHE_INCLUDES */

  #ifdef	USE_SSL
! #if ((!(RSAREF)) && (!(SYSSSL)))
  /* Libraries on most systems.. */
  #include <openssl/rsa.h>
  #include <openssl/crypto.h>
--- 160,166 ----
  #endif				/* NO_APACHE_INCLUDES */

  #ifdef	USE_SSL
! #if ((!defined(RSAREF)) && (!defined(SYSSSL)))
  /* Libraries on most systems.. */
  #include <openssl/rsa.h>
  #include <openssl/crypto.h>
***************
*** 312,319 ****
  #endif

  static void close_connection(struct connection * c);
! #if NO_WRITEV || USE_SSL
! static void s_write(struct connection * c, char *buff, int len);
  #endif

  /* --------------------------------------------------------- */
--- 311,318 ----
  #endif

  static void close_connection(struct connection * c);
! #if (defined(NO_WRITEV) || defined(USE_SSL))
! static int s_write(struct connection * c, char *buff, int len);
  #endif

  /* --------------------------------------------------------- */
***************
*** 343,354 ****
  /* XXX this sucks - SSL mode and writev() do not mix
   *     another artificial difference.
   */
! #if !NO_WRITEV && !USE_SSL
      struct iovec out[2];
!     int outcnt = 1, snd = 0;
  #endif
      gettimeofday(&c->connect, 0);
! #if !NO_WRITEV && !USE_SSL
      out[0].iov_base = request;
      out[0].iov_len = reqlen;

--- 342,354 ----
  /* XXX this sucks - SSL mode and writev() do not mix
   *     another artificial difference.
   */
! #if ((!(defined(NO_WRITEV))) && (!(defined(USE_SSL))))
      struct iovec out[2];
!     int outcnt = 1;
  #endif
+     int snd = 0;
      gettimeofday(&c->connect, 0);
! #if ((!(defined(NO_WRITEV))) && (!(defined(USE_SSL))))
      out[0].iov_base = request;
      out[0].iov_len = reqlen;

***************
*** 387,400 ****

  /*  Do actual data writing */

! #if NO_WRITEV || USE_SSL
! static void s_write(struct connection * c, char *buff, int len)
  {
      do {
  	int n;
! #if USE_SSL
  	if (ssl) {
! 	    n = SSL_write(c->ssl, buff, len);
  	    if (n < 0) {
  		int e = SSL_get_error(c->ssl, n);
  		/* XXXX propably wrong !!! */
--- 388,402 ----

  /*  Do actual data writing */

! #if ((defined(NO_WRITEV)) || (defined(USE_SSL)))
! static int s_write(struct connection * c, char *buff, int len)
  {
+     int left = len;
      do {
  	int n;
! #ifdef USE_SSL
  	if (ssl) {
! 	    n = SSL_write(c->ssl, buff, left);
  	    if (n < 0) {
  		int e = SSL_get_error(c->ssl, n);
  		/* XXXX propably wrong !!! */
***************
*** 406,412 ****
  	}
  	else
  #endif
! 	    n = ab_write(c->fd, buff, len);

  	if (n < 0) {
  	    switch (errno) {
--- 408,414 ----
  	}
  	else
  #endif
! 	    n = ab_write(c->fd, buff, left);

  	if (n < 0) {
  	    switch (errno) {
***************
*** 416,424 ****
  		/* We've tried to write to a broken pipe. */
  		epipe++;
  		close_connection(c);
! 		return;
  	    default:
! #if USE_SSL
  		if (ssl) {
  			fprintf(stderr,"Error writing: ");
  	    		ERR_print_errors_fp(stderr);
--- 418,426 ----
  		/* We've tried to write to a broken pipe. */
  		epipe++;
  		close_connection(c);
! 		return len - left;
  	    default:
! #ifdef USE_SSL
  		if (ssl) {
  			fprintf(stderr,"Error writing: ");
  	    		ERR_print_errors_fp(stderr);
***************
*** 430,440 ****
  	}
  	else if (n) {
  	    if (verbosity >= 3)
! 		printf(" --> write(%x) %d (%d)\n", (unsigned char) buff[0], n, len);
  	    buff += n;
! 	    len -= n;
  	};
!     } while (len > 0);
  }
  #endif

--- 432,444 ----
  	}
  	else if (n) {
  	    if (verbosity >= 3)
! 		printf(" --> write(%x) %d (%d)\n", (unsigned char) buff[0], n, left);
  	    buff += n;
! 	    left -= n;
  	};
!     } while (left > 0);
!
!     return len-left;
  }
  #endif

***************
*** 879,885 ****
  	goto _bad;
      };

! #if USE_SSL
      /*
       * XXXX move nonblocker - so that measnurement needs to have its OWN
       * state engine OR cannot be compared to http.
--- 883,889 ----
  	goto _bad;
      };

! #ifdef USE_SSL
      /*
       * XXXX move nonblocker - so that measnurement needs to have its OWN
       * state engine OR cannot be compared to http.
***************
*** 926,932 ****
  	    fprintf(stderr, "SSL connection OK: %s\n", SSL_get_cipher(c->ssl));
      }
  #endif
! #if USE_SSL
      if (ssl)
  	nonblock(c->fd);
  #endif
--- 930,936 ----
  	    fprintf(stderr, "SSL connection OK: %s\n", SSL_get_cipher(c->ssl));
      }
  #endif
! #ifdef USE_SSL
      if (ssl)
  	nonblock(c->fd);
  #endif
***************
*** 1001,1007 ****
      char respcode[4];		/* 3 digits and null */

      gettimeofday(&c->beginread, 0);
! #if USE_SSL
      if (ssl) {
  	r = SSL_read(c->ssl, buffer, sizeof(buffer));
  	/* XXX fundamwentally worng .. */
--- 1005,1011 ----
      char respcode[4];		/* 3 digits and null */

      gettimeofday(&c->beginread, 0);
! #ifdef USE_SSL
      if (ssl) {
  	r = SSL_read(c->ssl, buffer, sizeof(buffer));
  	/* XXX fundamwentally worng .. */
***************
*** 1364,1370 ****
  static void usage(char *progname)
  {
      fprintf(stderr, "Usage: %s [options] [http"
! #if USE_SSL
  	    "[s]"
  #endif
  	    "://]hostname[:port]/path\n", progname);
--- 1368,1374 ----
  static void usage(char *progname)
  {
      fprintf(stderr, "Usage: %s [options] [http"
! #ifdef USE_SSL
  	    "[s]"
  #endif
  	    "://]hostname[:port]/path\n", progname);
***************
*** 1394,1400 ****
      fprintf(stderr, "    -S              Do not show confidence estimators and warnings.\n");
      fprintf(stderr, "    -g filename     Output collected data to gnuplot format file.\n");
      fprintf(stderr, "    -e filename     Output CSV file with percentages served\n");
! #if USE_SSL
      fprintf(stderr, "    -s              Use httpS instead of HTTP (SSL)\n");
  #endif
      fprintf(stderr, "    -h              Display usage information (this message)\n");
--- 1398,1404 ----
      fprintf(stderr, "    -S              Do not show confidence estimators and warnings.\n");
      fprintf(stderr, "    -g filename     Output collected data to gnuplot format file.\n");
      fprintf(stderr, "    -e filename     Output CSV file with percentages served\n");
! #ifdef USE_SSL
      fprintf(stderr, "    -s              Use httpS instead of HTTP (SSL)\n");
  #endif
      fprintf(stderr, "    -h              Display usage information (this message)\n");
***************
*** 1414,1420 ****
      if (strlen(purl) > 7 && strncmp(purl, "http://", 7) == 0)
  	purl += 7;
      else
! #if USE_SSL
      if (strlen(purl) > 8 && strncmp(purl, "https://", 8) == 0) {
  	purl += 8;
  	ssl = 1;
--- 1418,1424 ----
      if (strlen(purl) > 7 && strncmp(purl, "http://", 7) == 0)
  	purl += 7;
      else
! #ifdef USE_SSL
      if (strlen(purl) > 8 && strncmp(purl, "https://", 8) == 0) {
  	purl += 8;
  	ssl = 1;
***************
*** 1442,1448 ****
  	port = atoi(p);

      if ((
! #if USE_SSL
  	(ssl != 0) && (port != 443)) || ((ssl == 0) &&
  #endif
  	(port != 80)))
--- 1446,1452 ----
  	port = atoi(p);

      if ((
! #ifdef USE_SSL
  	(ssl != 0) && (port != 443)) || ((ssl == 0) &&
  #endif
  	(port != 80)))
***************
*** 1504,1515 ****
      proxyhost[0] = '\0';
      optind = 1;
      while ((c = getopt(argc, argv, "n:c:t:T:p:v:kVhwix:y:z:C:H:P:A:g:X:de:Sq"
! #if USE_SSL
  		       "s"
  #endif
  		       )) > 0) {
  	switch (c) {
! #if USE_SSL
  	case 's':
  	    ssl = 1;
  	    break;
--- 1508,1519 ----
      proxyhost[0] = '\0';
      optind = 1;
      while ((c = getopt(argc, argv, "n:c:t:T:p:v:kVhwix:y:z:C:H:P:A:g:X:de:Sq"
! #ifdef USE_SSL
  		       "s"
  #endif
  		       )) > 0) {
  	switch (c) {
! #ifdef USE_SSL
  	case 's':
  	    ssl = 1;
  	    break;



Mime
View raw message