aboutsummaryrefslogtreecommitdiff
path: root/libsylph
diff options
context:
space:
mode:
authorhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2007-01-19 07:45:18 +0000
committerhiro <hiro@ee746299-78ed-0310-b773-934348b2243d>2007-01-19 07:45:18 +0000
commit3145665c922ead3c2de272eb0ad54c30c228046b (patch)
tree9189a3da73f4fef843e1225d15591ebf88ab9204 /libsylph
parentdeda2fa6804e19f6ae52291e9895c24cd0f7192d (diff)
win32: increased SO_SNDBUF and SO_RCVBUF (fixes low performance on sending data).
git-svn-id: svn://sylpheed.sraoss.jp/sylpheed/trunk@1499 ee746299-78ed-0310-b773-934348b2243d
Diffstat (limited to 'libsylph')
-rw-r--r--libsylph/session.c6
-rw-r--r--libsylph/socket.c20
2 files changed, 23 insertions, 3 deletions
diff --git a/libsylph/session.c b/libsylph/session.c
index 3109a478..73691dca 100644
--- a/libsylph/session.c
+++ b/libsylph/session.c
@@ -956,9 +956,11 @@ static gint session_write_buf(Session *session)
return 0;
}
+#define WRITE_DATA_BUFFSIZE 8192
+
static gint session_write_data(Session *session)
{
- gchar buf[SESSION_BUFFSIZE];
+ gchar buf[WRITE_DATA_BUFFSIZE];
gint write_len;
gint to_write_len;
@@ -967,7 +969,7 @@ static gint session_write_data(Session *session)
g_return_val_if_fail(session->write_data_len > 0, -1);
to_write_len = session->write_data_len - session->write_data_pos;
- to_write_len = MIN(to_write_len, SESSION_BUFFSIZE);
+ to_write_len = MIN(to_write_len, WRITE_DATA_BUFFSIZE);
if (fread(buf, to_write_len, 1, session->write_data_fp) < 1) {
g_warning("session_write_data: reading data from file failed\n");
session->state = SESSION_ERROR;
diff --git a/libsylph/socket.c b/libsylph/socket.c
index 59b13703..189c1b77 100644
--- a/libsylph/socket.c
+++ b/libsylph/socket.c
@@ -1,6 +1,6 @@
/*
* LibSylph -- E-Mail client library
- * Copyright (C) 1999-2006 Hiroyuki Yamamoto
+ * Copyright (C) 1999-2007 Hiroyuki Yamamoto
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -676,6 +676,21 @@ struct hostent *my_gethostbyname(const gchar *hostname)
return hp;
}
+static void sock_set_buffer_size(gint sock)
+{
+#ifdef G_OS_WIN32
+ gint val = 32768;
+ guint len = sizeof(val);
+
+ setsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *)&val, len);
+ setsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&val, len);
+ getsockopt(sock, SOL_SOCKET, SO_SNDBUF, (char *)&val, &len);
+ debug_print("SO_SNDBUF = %d\n", val);
+ getsockopt(sock, SOL_SOCKET, SO_RCVBUF, (char *)&val, &len);
+ debug_print("SO_RCVBUF = %d\n", val);
+#endif
+}
+
#ifndef INET6
static gint my_inet_aton(const gchar *hostname, struct in_addr *inp)
{
@@ -771,6 +786,7 @@ static SockDesc sock_connect_by_getaddrinfo(const gchar *hostname, gushort port)
sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
if (!SOCKET_IS_VALID(sock))
continue;
+ sock_set_buffer_size(sock);
if (sock_connect_with_timeout
(sock, ai->ai_addr, ai->ai_addrlen, io_timeout) == 0)
@@ -808,6 +824,7 @@ SockInfo *sock_connect(const gchar *hostname, gushort port)
#endif /* G_OS_WIN32 */
return NULL;
}
+ sock_set_buffer_size(sock);
if (sock_connect_by_hostname(sock, hostname, port) < 0) {
if (errno != 0) perror("connect");
@@ -990,6 +1007,7 @@ static gint sock_connect_address_list_async(SockConnectData *conn_data)
continue;
}
+ sock_set_buffer_size(sock);
set_nonblocking_mode(sock, TRUE);
if (connect(sock, addr_data->addr, addr_data->addr_len) < 0) {