Mercurial > hg > minc-tools
changeset 1153:b60c70a71b8a
Added code to set socket buffer size so that things will go faster
under SunOS.
author | neelin <neelin> |
---|---|
date | Wed, 01 Apr 1998 20:56:58 +0000 |
parents | 7c4e2c120b88 |
children | f890f2ba44ff |
files | conversion/Acr_nema/dicom_client_routines.c |
diffstat | 1 files changed, 32 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/conversion/Acr_nema/dicom_client_routines.c +++ b/conversion/Acr_nema/dicom_client_routines.c @@ -5,9 +5,13 @@ @GLOBALS : @CREATED : May 6, 1997 (Peter Neelin) @MODIFIED : $Log: dicom_client_routines.c,v $ -@MODIFIED : Revision 6.10 1998-03-23 20:22:56 neelin -@MODIFIED : Removed unnecessary include. +@MODIFIED : Revision 6.11 1998-04-01 20:56:58 neelin +@MODIFIED : Added code to set socket buffer size so that things will go faster +@MODIFIED : under SunOS. @MODIFIED : + * Revision 6.10 1998/03/23 20:22:56 neelin + * Removed unnecessary include. + * * Revision 6.9 1998/03/23 20:17:04 neelin * Moved some general-purpose functions to dicom_network.c. * @@ -71,7 +75,7 @@ ---------------------------------------------------------------------------- */ #ifndef lint -static char rcsid[]="$Header: /private-cvsroot/minc/conversion/Acr_nema/dicom_client_routines.c,v 6.10 1998-03-23 20:22:56 neelin Exp $"; +static char rcsid[]="$Header: /private-cvsroot/minc/conversion/Acr_nema/dicom_client_routines.c,v 6.11 1998-04-01 20:56:58 neelin Exp $"; #endif #include <stdio.h> @@ -144,6 +148,9 @@ DEFINE_ELEMENT(static, ACR_Samples_per_pixel , 0x0028, 0x0002, US); DEFINE_ELEMENT(static, ACR_Photometric_interpretation , 0x0028, 0x0004, CS); +/* Minimum socket buffer size that we would like to have for TCP connections */ +#define MIN_SOCK_BUFLEN (50*1024) + /* Globals for handling connection timeouts */ static int Timeout_length = 60 * 2 ; /* Timeout in seconds */ static int Initial_timeout_length = 10; /* Timeout for initial connection */ @@ -290,6 +297,8 @@ struct hostent *hp; struct sockaddr_in server; int sock; + int sockbuflen, oldsockbuflen; + int sockoptlen; /* Set default file pointers */ *fpin = *fpout = NULL; @@ -347,6 +356,26 @@ } (void) alarm(0); + /* Get socket buffer size */ + sockbuflen = MIN_SOCK_BUFLEN; + sockoptlen = sizeof(sockbuflen); + if ((getsockopt(sock, SOL_SOCKET, SO_SNDBUF, + (char *) &sockbuflen, &sockoptlen) == 0) && + (sockbuflen < MIN_SOCK_BUFLEN) && (sockbuflen > 0)) { + oldsockbuflen = sockbuflen; + sockbuflen = MIN_SOCK_BUFLEN; + sockoptlen = sizeof(sockbuflen); + while ((sockbuflen > oldsockbuflen) && + (setsockopt(sock, SOL_SOCKET, SO_SNDBUF, + (char *) &sockbuflen, sockoptlen) != 0)) { + sockbuflen = (int) ((double) sockbuflen * 0.75); + } + if (sockbuflen <= oldsockbuflen) { + (void) setsockopt(sock, SOL_SOCKET, SO_SNDBUF, + (char *) &oldsockbuflen, sockoptlen); + } + } + /* Open file handles */ if ((*fpin = fdopen(sock, "r")) == NULL) { (void) fprintf(stderr, "Error opening socket for read\n");