diff options
author | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2007-01-19 07:45:18 +0000 |
---|---|---|
committer | hiro <hiro@ee746299-78ed-0310-b773-934348b2243d> | 2007-01-19 07:45:18 +0000 |
commit | 3145665c922ead3c2de272eb0ad54c30c228046b (patch) | |
tree | 9189a3da73f4fef843e1225d15591ebf88ab9204 /libsylph | |
parent | deda2fa6804e19f6ae52291e9895c24cd0f7192d (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.c | 6 | ||||
-rw-r--r-- | libsylph/socket.c | 20 |
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) { |