[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mhc:01991] Re: FYI: mhc2palm with LANSync



FreeBSD currentの調子がわるくて
USB syncができなくなっているので
LAN syncに再挑戦しました。

  Message-Id: <20040622.181838.104115004.hide@xxxxxxxx>
  Date:       Tue, 22 Jun 2004 18:18:38 +0900 (JST)
  From:       KOIE Hidetaka (鯉江英隆) <hide@xxxxxxxx>
  Subject:    [mhc:01926] FYI: mhc2palm with LANSync

  | 表: pilot-xfer -lの時間
  | 接続       時間(sec)
  | usb        00:15
  | wlan       00:26
  | wlan(save) 02:08

  | 省電力モードではつかいものにならんので
  | ちょっとがっかり。

tcpdump+tcptraceでパケットを調べてみたら
PC側が100msくらいパケットを出すのが遅れているように見えたので
sysctl net.inet.tcp.delayed_ack=0でDelayedAckを止めてみましたが効かず。
で、pilot-linkのソースをみてみると
CP_NODELAYオプションを設定してなかったので
設定するようにしたら劇的に改善しました。
pilot-xfer -lの時間を計ってみると00:35 secなのでかなり実用的になりました。

なぜこれで速くなるのか理解できませんが
たぶんTH55の省電力のタイマとPCのTCPタイマとが干渉しているでしょうね。

--
鯉江英隆 <hide@xxxxxxxx>
--- libpisock/inet.c.orig	Sat Dec 14 22:37:17 2002
+++ libpisock/inet.c	Fri Nov 12 13:54:22 2004
@@ -175,6 +175,20 @@
 	return dev;
 }
 
+#if 1 /* koie */
+#include <netinet/tcp.h>
+static void
+pi_inet_set_nodelay(int sd)
+{
+	int one = 1;
+#if defined SOL_TCP
+	setsockopt(sd, SOL_TCP, TCP_NODELAY, (char*) &one, sizeof one);
+#elif defined IPPROTO_TCP
+	setsockopt(sd, IPPROTO_TCP, TCP_NODELAY, (char*) &one, sizeof one);
+#endif
+}
+#endif
+
 /***********************************************************************
  *
  * Function:    pi_inet_connect
@@ -232,6 +246,9 @@
 		    "DEV CONNECT Inet: Unable to connect\n"));
 		return -1;
 	}
+#if 1 /* koie */
+	pi_inet_set_nodelay(ps->sd);
+#endif
 	
 	ps->raddr 	= malloc(addrlen);
 	memcpy(ps->raddr, addr, addrlen);
@@ -389,6 +406,9 @@
  	sd = accept(ps->sd, addr, addrlen);
 	if (sd < 0)
 		goto fail;
+#if 1 /* koie */
+	pi_inet_set_nodelay(sd);
+#endif
 
 	pi_socket_setsd(acpt, sd);
 	pi_socket_init(acpt);