[dovecot-cvs] dovecot/src/login-common ssl-proxy-openssl.c, 1.27, 1.28

cras at dovecot.org cras at dovecot.org
Sun Sep 18 17:43:12 EEST 2005


Update of /var/lib/cvs/dovecot/src/login-common
In directory talvi:/tmp/cvs-serv1933

Modified Files:
	ssl-proxy-openssl.c 
Log Message:
Cork/uncork the SSL socket when writing. Reduces latency a lot.



Index: ssl-proxy-openssl.c
===================================================================
RCS file: /var/lib/cvs/dovecot/src/login-common/ssl-proxy-openssl.c,v
retrieving revision 1.27
retrieving revision 1.28
diff -u -d -r1.27 -r1.28
--- ssl-proxy-openssl.c	1 Oct 2004 14:41:16 -0000	1.27
+++ ssl-proxy-openssl.c	18 Sep 2005 14:43:10 -0000	1.28
@@ -105,6 +105,7 @@
 {
 	struct ssl_proxy *proxy = context;
 	ssize_t ret;
+	int corked = FALSE;
 
 	if (proxy->sslout_size == sizeof(proxy->sslout_buf)) {
 		/* buffer full, block input until it's written */
@@ -126,10 +127,17 @@
 			break;
 		} else {
 			proxy->sslout_size += ret;
+			if (!corked) {
+				net_set_cork(proxy->fd_ssl, TRUE);
+				corked = TRUE;
+			}
 			ssl_write(proxy);
 		}
 	}
 
+	if (corked)
+		net_set_cork(proxy->fd_ssl, FALSE);
+
 	ssl_proxy_unref(proxy);
 }
 
@@ -304,8 +312,11 @@
 
 		if (proxy->sslout_size == 0)
 			ssl_set_io(proxy, SSL_REMOVE_OUTPUT);
-		else
+		else {
+			net_set_cork(proxy->fd_ssl, TRUE);
 			ssl_write(proxy);
+			net_set_cork(proxy->fd_ssl, FALSE);
+		}
 	}
 
 	ssl_proxy_unref(proxy);



More information about the dovecot-cvs mailing list