git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH/RFC 1/7] imap-send: use separate read and write fds
@ 2009-10-03  0:39 Erik Faye-Lund
  2009-10-03  0:39 ` [PATCH/RFC 2/7] imap-send: use run-command API for tunneling Erik Faye-Lund
  2009-10-03  9:40 ` [PATCH/RFC 1/7] imap-send: use separate read and write fds Jeff King
  0 siblings, 2 replies; 18+ messages in thread
From: Erik Faye-Lund @ 2009-10-03  0:39 UTC (permalink / raw)
  To: msysgit; +Cc: git

Signed-off-by: Erik Faye-Lund <kusmabite@gmail.com>
---
 imap-send.c |   37 +++++++++++++++++++++++--------------
 1 files changed, 23 insertions(+), 14 deletions(-)

diff --git a/imap-send.c b/imap-send.c
index 3847fd1..ba50961 100644
--- a/imap-send.c
+++ b/imap-send.c
@@ -154,7 +154,7 @@ struct imap_list {
 };
 
 struct imap_socket {
-	int fd;
+	int fd[2];
 	SSL *ssl;
 };
 
@@ -304,8 +304,12 @@ static int ssl_socket_connect(struct imap_socket *sock, int use_tls_only, int ve
 		ssl_socket_perror("SSL_new");
 		return -1;
 	}
-	if (!SSL_set_fd(sock->ssl, sock->fd)) {
-		ssl_socket_perror("SSL_set_fd");
+	if (!SSL_set_rfd(sock->ssl, sock->fd[0])) {
+		ssl_socket_perror("SSL_set_rfd");
+		return -1;
+	}
+	if (!SSL_set_wfd(sock->ssl, sock->fd[1])) {
+		ssl_socket_perror("SSL_set_wfd");
 		return -1;
 	}
 
@@ -327,11 +331,12 @@ static int socket_read(struct imap_socket *sock, char *buf, int len)
 		n = SSL_read(sock->ssl, buf, len);
 	else
 #endif
-		n = xread(sock->fd, buf, len);
+		n = xread(sock->fd[0], buf, len);
 	if (n <= 0) {
 		socket_perror("read", sock, n);
-		close(sock->fd);
-		sock->fd = -1;
+		close(sock->fd[0]);
+		close(sock->fd[1]);
+		sock->fd[0] = sock->fd[1] = -1;
 	}
 	return n;
 }
@@ -344,11 +349,12 @@ static int socket_write(struct imap_socket *sock, const char *buf, int len)
 		n = SSL_write(sock->ssl, buf, len);
 	else
 #endif
-		n = write_in_full(sock->fd, buf, len);
+		n = write_in_full(sock->fd[1], buf, len);
 	if (n != len) {
 		socket_perror("write", sock, n);
-		close(sock->fd);
-		sock->fd = -1;
+		close(sock->fd[0]);
+		close(sock->fd[1]);
+		sock->fd[0] = sock->fd[1] = -1;
 	}
 	return n;
 }
@@ -361,7 +367,8 @@ static void socket_shutdown(struct imap_socket *sock)
 		SSL_free(sock->ssl);
 	}
 #endif
-	close(sock->fd);
+	close(sock->fd[0]);
+	close(sock->fd[1]);
 }
 
 /* simple line buffering */
@@ -960,7 +967,7 @@ static void imap_close_server(struct imap_store *ictx)
 {
 	struct imap *imap = ictx->imap;
 
-	if (imap->buf.sock.fd != -1) {
+	if (imap->buf.sock.fd[0] != -1) {
 		imap_exec(ictx, NULL, "LOGOUT");
 		socket_shutdown(&imap->buf.sock);
 	}
@@ -988,7 +995,7 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
 	ctx = xcalloc(sizeof(*ctx), 1);
 
 	ctx->imap = imap = xcalloc(sizeof(*imap), 1);
-	imap->buf.sock.fd = -1;
+	imap->buf.sock.fd[0] = imap->buf.sock.fd[1] = -1;
 	imap->in_progress_append = &imap->in_progress;
 
 	/* open connection to IMAP server */
@@ -1015,7 +1022,8 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
 
 		close(a[0]);
 
-		imap->buf.sock.fd = a[1];
+		imap->buf.sock.fd[0] = a[1];
+		imap->buf.sock.fd[1] = dup(a[1]);
 
 		imap_info("ok\n");
 	} else {
@@ -1092,7 +1100,8 @@ static struct store *imap_open_store(struct imap_server_conf *srvc)
 			goto bail;
 		}
 
-		imap->buf.sock.fd = s;
+		imap->buf.sock.fd[0] = s;
+		imap->buf.sock.fd[1] = dup(s);
 
 		if (srvc->use_ssl &&
 		    ssl_socket_connect(&imap->buf.sock, 0, srvc->ssl_verify)) {
-- 
1.6.5.rc2.7.g4f8d3

^ permalink raw reply related	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2009-10-09  0:06 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-03  0:39 [PATCH/RFC 1/7] imap-send: use separate read and write fds Erik Faye-Lund
2009-10-03  0:39 ` [PATCH/RFC 2/7] imap-send: use run-command API for tunneling Erik Faye-Lund
2009-10-03  0:39   ` [PATCH/RFC 3/7] imap-send: fix compilation-error on Windows Erik Faye-Lund
2009-10-03  0:39     ` [PATCH/RFC 4/7] imap-send: build imap-send " Erik Faye-Lund
2009-10-03  0:39       ` [PATCH/RFC 5/7] imap-send: provide fall-back random-source Erik Faye-Lund
2009-10-03  0:39         ` [PATCH/RFC 6/7] mingw: wrap SSL_set_(w|r)fd to call _get_osfhandle Erik Faye-Lund
2009-10-03  0:39           ` [PATCH/RFC 7/7] mingw: enable OpenSSL Erik Faye-Lund
2009-10-03  9:58         ` [PATCH/RFC 5/7] imap-send: provide fall-back random-source Jeff King
2009-10-03 18:45           ` Erik Faye-Lund
2009-10-03 18:59             ` Erik Faye-Lund
2009-10-03 20:43             ` Jeff King
2009-10-03 20:52               ` Jeff King
2009-10-08 23:16                 ` Erik Faye-Lund
2009-10-09  0:03                   ` Jeff King
2009-10-03  9:40 ` [PATCH/RFC 1/7] imap-send: use separate read and write fds Jeff King
2009-10-03 18:44   ` Erik Faye-Lund
2009-10-03 20:34     ` Jeff King
2009-10-03 21:34     ` Johannes Sixt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).