Index: uKadecot/trunk/uip/apps/webserver/websocket.c
===================================================================
--- uKadecot/trunk/uip/apps/webserver/websocket.c	(revision 125)
+++ uKadecot/trunk/uip/apps/webserver/websocket.c	(revision 148)
@@ -127,5 +127,6 @@
 		// Payload buffer
 		default:
-			_ecn_fbs_poke(ws->cur_in_msg, s->data_pos, *pos ^ s->masking_key[s->data_pos % 4]);
+			if(ws->cur_in_msg.ptr != NULL)
+				_ecn_fbs_poke(ws->cur_in_msg, s->data_pos, *pos ^ s->masking_key[s->data_pos % 4]);
 
 			s->data_pos++;
@@ -133,9 +134,12 @@
 				ER ret;
 				s->state = 0;
-				((ID *)ws->cur_in_msg.ptr->_gap)[0] = ws->wbsid;
-				ret = psnd_dtq(ecn_api_mailboxid, (intptr_t)ws->cur_in_msg.ptr);
-				if (ret != E_OK) {
-					syslog(LOG_WARNING, "websocket_input() : psnd_dtq(%d) result = %d", ecn_api_mailboxid, ret);
-					_ecn_fbs_del(ws->cur_in_msg);
+
+				if (ws->cur_in_msg.ptr != NULL) {
+					((ID *)ws->cur_in_msg.ptr->_gap)[0] = ws->wbsid;
+					ret = psnd_dtq(ecn_api_mailboxid, (intptr_t)ws->cur_in_msg.ptr);
+					if (ret != E_OK) {
+						syslog(LOG_WARNING, "websocket_input() : psnd_dtq(%d) result = %d", ecn_api_mailboxid, ret);
+						_ecn_fbs_del(ws->cur_in_msg);
+					}
 				}
 				memset(&ws->cur_in_msg, 0, sizeof(ws->cur_in_msg));
Index: uKadecot/trunk/uip/target/if_rx62n/if_rx62n.c
===================================================================
--- uKadecot/trunk/uip/target/if_rx62n/if_rx62n.c	(revision 125)
+++ uKadecot/trunk/uip/target/if_rx62n/if_rx62n.c	(revision 148)
@@ -378,5 +378,5 @@
  */
 
-void
+bool_t
 rx62n_start (T_IF_SOFTC *ic, void *output, int size)
 {
@@ -391,5 +391,5 @@
 
 		if (desc->tact != 0) {
-			break;
+			return false;
 		}
 
@@ -423,4 +423,6 @@
 		sil_wrw_mem(EDMAC_EDTRR, EDMAC_EDTRR_TR);
 	}
+
+	return true;
 }
 
@@ -435,5 +437,5 @@
 	T_RX62N_SOFTC *sc;
 	uint32_t ecsr, eesr, psr;
-	bool_t acttsk;
+	bool_t acttsk = false;
 
 	i_begin_int(INTNO_IF_RX62N_TRX);
Index: uKadecot/trunk/uip/target/if_rx62n/if_rx62n.h
===================================================================
--- uKadecot/trunk/uip/target/if_rx62n/if_rx62n.h	(revision 125)
+++ uKadecot/trunk/uip/target/if_rx62n/if_rx62n.h	(revision 148)
@@ -60,5 +60,5 @@
  */
 
-#define NUM_IF_RX62N_TXBUF		8	/* 送信バッファ数			*/
+#define NUM_IF_RX62N_TXBUF		2	/* 送信バッファ数			*/
 #define NUM_IF_RX62N_RXBUF		8	/* 受信バッファ数			*/
 #define IF_RX62N_BUF_PAGE_SIZE	1518	/* バッファサイズ */
@@ -120,5 +120,5 @@
 extern bool_t rx62n_link(T_IF_SOFTC *ic);
 extern int rx62n_read(T_IF_SOFTC *ic, void **input);
-extern void rx62n_start(T_IF_SOFTC *ic, void *output, int size);
+extern bool_t rx62n_start(T_IF_SOFTC *ic, void *output, int size);
 extern ER rx62n_addmulti(T_IF_SOFTC *ic);
 extern void if_rx62n_trx_handler(void);
Index: uKadecot/trunk/uip/task/uip_task.c
===================================================================
--- uKadecot/trunk/uip/task/uip_task.c	(revision 125)
+++ uKadecot/trunk/uip/task/uip_task.c	(revision 148)
@@ -98,4 +98,5 @@
 	T_IF_SOFTC	*ic = IF_ETHER_NIC_GET_SOFTC();
 	int ret;
+	bool_t tx;
 
 	PT_BEGIN(&uiptsk->pt);
@@ -124,8 +125,8 @@
 
 		PT_WAIT_UNTIL(&uiptsk->pt, (ret = ic->link_pre != ic->link_now ? 1 :
-			(ic->rxb_read != ic->rxb_write ? 2 :
 			(uip_out_buf[uip_out_rpos].len > 0 ? 3 :
 			(ws_out_req != ws_out_res ? 4 :
-			(timer_expired(&uiptsk->periodic_timer) ? 5 : 0))))) != 0);
+			(timer_expired(&uiptsk->periodic_timer) ? 5 :
+			(ic->rxb_read != ic->rxb_write ? 2 : 0))))) != 0);
 
 		if(ret == 1){
@@ -146,5 +147,10 @@
 						if (uip_len > 0) {
 							uip_arp_out();
-							IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+							for (;;) {
+								tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+								if (tx)
+									break;
+								PT_YIELD(&uiptsk->pt);
+							}
 						}
 					}
@@ -174,5 +180,10 @@
 					if (uip_len > 0) {
 						uip_arp_out();
-						IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+						for (;;) {
+							tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+							if (tx)
+								break;
+							PT_YIELD(&uiptsk->pt);
+						}
 						PT_YIELD(&uiptsk->pt);
 						continue;
@@ -185,5 +196,10 @@
 					   uip_len is set to a value > 0. */
 					if (uip_len > 0) {
-						IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+						for (;;) {
+							tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+							if (tx)
+								break;
+							PT_YIELD(&uiptsk->pt);
+						}
 						PT_YIELD(&uiptsk->pt);
 						continue;
@@ -204,9 +220,4 @@
 			uip_udp_send(buf->len);
 
-			buf->len = 0;
-			uip_out_rpos++;
-			if (uip_out_rpos >= UIP_BUF_COUNT)
-				uip_out_rpos = 0;
-
 			uip_udp_conn = cepid;
 			uip_process(UIP_UDP_SEND_CONN);
@@ -214,5 +225,17 @@
 			cepid->rport = 0;
 			uip_arp_out();
-			IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+			for (;;) {
+				tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+				if (tx)
+					break;
+				PT_YIELD(&uiptsk->pt);
+			}
+
+			buf = &uip_out_buf[uip_out_rpos];
+			uip_out_rpos++;
+			if (uip_out_rpos >= UIP_BUF_COUNT)
+				uip_out_rpos = 0;
+			buf->len = 0;
+
 			PT_YIELD(&uiptsk->pt);
 			continue;
@@ -231,5 +254,10 @@
 				if (uip_len > 0) {
 					uip_arp_out();
-					IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+					for (;;) {
+						tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+						if (tx)
+							break;
+						PT_YIELD(&uiptsk->pt);
+					}
 					PT_YIELD(&uiptsk->pt);
 				}
@@ -247,5 +275,10 @@
 				if (uip_len > 0) {
 					uip_arp_out();
-					IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+					for (;;) {
+						tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+						if (tx)
+							break;
+						PT_YIELD(&uiptsk->pt);
+					}
 					PT_YIELD(&uiptsk->pt);
 				}
@@ -261,5 +294,10 @@
 				if (uip_len > 0) {
 					uip_arp_out();
-					IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+					for (;;) {
+						tx = IF_ETHER_NIC_START(ic, uip_buf, uip_len);
+						if (tx)
+							break;
+						PT_YIELD(&uiptsk->pt);
+					}
 					PT_YIELD(&uiptsk->pt);
 				}
