source: azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv1.c@ 388

Last change on this file since 388 was 388, checked in by coas-nagasima, 5 years ago

Azure IoT Hub Device C SDK を使ったサンプルの追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc
File size: 16.0 KB
Line 
1/*
2 * TINET (TCP/IP Protocol Stack)
3 *
4 * Copyright (C) 2001-2017 by Dep. of Computer Science and Engineering
5 * Tomakomai National College of Technology, JAPAN
6 *
7 * 上記著作権者
8は,以下の (1)~(4) の条件か,Free Software Foundation
9 * によってå…
10¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
11 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
12 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
13å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
14 * 利用と呼ぶ)することを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再é…
20å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
21å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
22 * 者
23マニュアルなど)に,上記の著作権表示,この利用条件および下記
24 * の無保証規定を掲載すること.
25 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
26 * 用できない形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®æ¡ä»¶ã‚’満たすこと.
28 * (a) 再é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
30マニュアルなど)に,上記の著
31 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
32 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
33 * 害からも,上記著作権者
34およびTOPPERSプロジェクトをå…
35è²¬ã™ã‚‹ã“と.
36 *
37 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
38お
39 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
40 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
41 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
42 *
43 * @(#) $Id: tcp_echo_srv1.c 388 2019-05-22 11:25:18Z coas-nagasima $
44 */
45
46/*
47 * TCP ECHO サーバ #1
48 *
49 * ・送受信タスク同一型
50 * ・ノンブロッキングコール
51 * ・省コピー API
52 * ・IPv4/IPv6
53 * ・緊急データの受信
54 */
55
56#include <string.h>
57
58#ifdef TARGET_KERNEL_ASP
59
60#include <kernel.h>
61#include <sil.h>
62#include <t_syslog.h>
63#include "kernel_cfg.h"
64#include "tinet_cfg.h"
65
66#endif /* of #ifdef TARGET_KERNEL_ASP */
67
68#ifdef TARGET_KERNEL_JSP
69
70#include <t_services.h>
71#include "kernel_id.h"
72#include "tinet_id.h"
73
74#endif /* of #ifdef TARGET_KERNEL_JSP */
75
76#include <netinet/in.h>
77#include <netinet/in_itron.h>
78
79#include <netapp/netapp.h>
80#include <netapp/netapp_var.h>
81#include <netapp/tcp_echo_srv1.h>
82#include <netapp/tcp_echo_srv1_var.h>
83
84#if defined(_NET_CFG_BYTE_ORDER)
85#error "net/net.h included."
86#endif
87
88#ifdef USE_TCP_ECHO_SRV1
89
90/*
91 * 表示
92 */
93
94//#define SHOW_RCV_RANGE
95
96/*
97 * コネクション切断方法の指定
98 */
99
100#define USE_TCP_SHT_CEP
101
102/*
103 * タイムアウト
104 */
105
106#ifdef TOPPERS_S810_CLG3_85
107
108#define CLS_TMO TMO_FEVR /* Close Wait は標準で 60秒 */
109//#define RCV_TMO TMO_FEVR
110#define RCV_TMO (30*SYSTIM_HZ)
111//#define SND_TMO TMO_FEVR
112#define SND_TMO (30*SYSTIM_HZ)
113
114#else /* of #ifdef TOPPERS_S810_CLG3_85 */
115
116//#define CLS_TMO TMO_FEVR /* Close Wait は標準で 60秒 */
117#define CLS_TMO (70*SYSTIM_HZ+(netapp_rand()%SYSTIM_HZ)*10)
118//#define RCV_TMO TMO_FEVR
119#define RCV_TMO (30*SYSTIM_HZ+(netapp_rand()%SYSTIM_HZ)*30)
120//#define SND_TMO TMO_FEVR
121#define SND_TMO (40*SYSTIM_HZ+(netapp_rand()%SYSTIM_HZ)*20)
122
123#endif /* of #ifdef TOPPERS_S810_CLG3_85 */
124
125/*
126 * å…
127¨åŸŸå¤‰æ•°
128 */
129
130/* TCP 送受信ウィンドバッファ */
131
132#ifndef TCP_CFG_SWBUF_CSAVE
133uint8_t tcp_echo_srv_swbuf[NUM_TCP_ECHO_SRV_TASKS][TCP_ECHO_SRV_SWBUF_SIZE];
134#endif
135
136#ifndef TCP_CFG_RWBUF_CSAVE
137uint8_t tcp_echo_srv_rwbuf[NUM_TCP_ECHO_SRV_TASKS][TCP_ECHO_SRV_RWBUF_SIZE];
138#endif
139
140#ifndef USE_TCP_NON_BLOCKING
141
142/*
143 * 変数
144 */
145
146#ifdef USE_TCP_EXTENTIONS
147
148T_TCP_ECHO_SRV_INFO tcp_echo_srv_info[NUM_TCP_ECHO_SRV_TASKS];
149
150#else /* of #ifdef USE_TCP_EXTENTIONS */
151
152T_TCP_ECHO_SRV_INFO tcp_echo_srv_info[] = {
153
154#if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && defined(USE_TCP4_ECHO_SRV)
155
156 { TCP4_ECHO_SRV_CEPID1, TCP4_ECHO_SRV_REPID },
157
158#else /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && defined(USE_TCP4_ECHO_SRV) */
159
160 { TCP_ECHO_SRV_CEPID1, TCP_ECHO_SRV_REPID },
161
162#endif /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && defined(USE_TCP4_ECHO_SRV) */
163
164#if NUM_TCP_ECHO_SRV_TASKS >= 2
165 { TCP_ECHO_SRV_CEPID2, TCP_ECHO_SRV_REPID },
166#endif
167#if NUM_TCP_ECHO_SRV_TASKS >= 3
168 { TCP_ECHO_SRV_CEPID3, TCP_ECHO_SRV_REPID },
169#endif
170#if NUM_TCP_ECHO_SRV_TASKS >= 4
171 { TCP_ECHO_SRV_CEPID4, TCP_ECHO_SRV_REPID },
172#endif
173#if NUM_TCP_ECHO_SRV_TASKS >= 5
174 { TCP_ECHO_SRV_CEPID5, TCP_ECHO_SRV_REPID },
175#endif
176#if NUM_TCP_ECHO_SRV_TASKS >= 6
177 { TCP_ECHO_SRV_CEPID6, TCP_ECHO_SRV_REPID },
178#endif
179#if NUM_TCP_ECHO_SRV_TASKS >= 7
180 { TCP_ECHO_SRV_CEPID7, TCP_ECHO_SRV_REPID },
181#endif
182#if NUM_TCP_ECHO_SRV_TASKS >= 8
183 { TCP_ECHO_SRV_CEPID8, TCP_ECHO_SRV_REPID },
184#endif
185
186 };
187
188#endif /* of #ifdef USE_TCP_EXTENTIONS */
189
190/*
191 * tcp_passive_open -- 受動オープンを実行する。
192 *
193 * USE_TCP_NON_BLOCKING OFF
194 */
195
196#if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
197
198static ER
199tcp_passive_open (T_TCP_ECHO_SRV_INFO *info, char apip)
200{
201 ER error = E_OK;
202
203#if TNUM_TCP4_REPID > 0
204 T_IPV4EP dst4;
205#endif
206
207 if (apip == API_PROTO_IPV6) {
208
209#if TNUM_TCP6_REPID > 0
210
211 /* 受付口は IPv6 */
212 if ((error = tcp6_acp_cep(info->cepid, info->repid, &info->dst, TMO_FEVR)) != E_OK)
213 return error;
214
215#ifdef USE_TCP_EXTENTIONS
216 if ((error = free_tcp6_rep(info->repid, true)) != E_OK)
217 return error;
218#endif /* of #ifdef USE_TCP_EXTENTIONS */
219
220#endif /* of #if TNUM_TCP6_REPID > 0 */
221
222 }
223 else {
224
225#if TNUM_TCP4_REPID > 0
226
227 /* 受付口は IPv4 */
228 if ((error = tcp_acp_cep(info->cepid, info->repid, &dst4, TMO_FEVR)) != E_OK)
229 return error;
230 in6_make_ipv4mapped (&info->dst.ipaddr, dst4.ipaddr);
231 info->dst.portno = dst4.portno;
232
233#ifdef USE_TCP_EXTENTIONS
234 if ((error = free_tcp4_rep(info->repid, true)) != E_OK)
235 return error;
236#endif /* of #ifdef USE_TCP_EXTENTIONS */
237
238#endif /* of #if TNUM_TCP4_REPID > 0 */
239
240 }
241
242 return error;
243 }
244
245#else /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */
246
247/*
248 * tcp_passive_open -- 受動オープンを実行する。
249 *
250 * USE_TCP_NON_BLOCKING OFF
251 */
252
253static ER
254tcp_passive_open (T_TCP_ECHO_SRV_INFO *info, char apip)
255{
256 ER error = E_OK;
257
258 if ((error = TCP_ACP_CEP(info->cepid, info->repid, &info->dst, TMO_FEVR)) != E_OK)
259 return error;
260
261#ifdef USE_TCP_EXTENTIONS
262 if ((error = FREE_TCP_REP(info->repid, true)) != E_OK)
263 return error;
264#endif /* of #ifdef USE_TCP_EXTENTIONS */
265
266 return error;
267 }
268
269#endif /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */
270
271#ifdef USE_COPYSAVE_API
272
273/*
274 * tcp_echo_srv -- TCP エコーサーバ
275 *
276 * USE_TCP_NON_BLOCKING OFF
277 * USE_COPYSAVE_API ON
278 */
279
280ER
281tcp_echo_srv (uint_t six, char apip)
282{
283 ER error = E_OK;
284 ER_UINT rblen, sblen;
285 SYSTIM now;
286 uint32_t total;
287 uint16_t rlen, slen, soff, scount, rcount;
288 char *rbuf, *sbuf;
289
290#ifdef SHOW_RCV_RANGE
291 char head, tail;
292#endif
293
294 if ((error = tcp_passive_open(&tcp_echo_srv_info[six], apip)) != E_OK) {
295 syslog(LOG_NOTICE, "[TES%c:%02u OPN] error: %s",
296 apip, tcp_echo_srv_info[six].cepid, itron_strerror(error));
297 return error;
298 }
299
300 syscall(get_tim(&now));
301
302#if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
303
304 if (apip == API_PROTO_IPV6)
305 syslog(LOG_NOTICE, "[TES6:%02u ACP] conct: %7lu,from: %s.%u",
306 tcp_echo_srv_info[six].cepid, now / SYSTIM_HZ,
307 ipv62str(NULL, &tcp_echo_srv_info[six].dst.ipaddr),
308 tcp_echo_srv_info[six].dst.portno);
309 else {
310 T_IN4_ADDR addr;
311
312 addr = ntohl(tcp_echo_srv_info[six].dst.ipaddr.s6_addr32[3]);
313 syslog(LOG_NOTICE, "[TES4:%02u ACP] conct: %7lu,from: %s.%u",
314 tcp_echo_srv_info[six].cepid, now / SYSTIM_HZ,
315 ip2str(NULL, &addr), tcp_echo_srv_info[six].dst.portno);
316 }
317
318#else /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */
319
320 syslog(LOG_NOTICE, "[TES%c:%02u ACP] conct: %7lu,from: %s.%u",
321 apip, tcp_echo_srv_info[six].cepid, now / SYSTIM_HZ,
322 IP2STR(NULL, &tcp_echo_srv_info[six].dst.ipaddr),
323 tcp_echo_srv_info[six].dst.portno);
324
325#endif /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */
326
327 scount = rcount = total = 0;
328 while (true) {
329 if ((rblen = tcp_rcv_buf(tcp_echo_srv_info[six].cepid, (void**)&rbuf, RCV_TMO)) <= 0) {
330 if (rblen != E_OK)
331 syslog(LOG_NOTICE, "[TES%c:%02u RCV] error: %s",
332 apip, tcp_echo_srv_info[six].cepid, itron_strerror(rblen));
333 break;
334 }
335
336 rcount ++;
337
338#ifdef SHOW_RCV_RANGE
339 head = *rbuf;
340 tail = *(rbuf + rblen - 1);
341
342 //syslog(LOG_NOTICE, "[TES%c:%02u RCV] len: %7lu",
343 // apip, tcp_echo_srv_info[six].cepid, (uint16_t)rblen);
344 syslog(LOG_NOTICE, "[TES%c:%02u RCV] rcount: %7lu, len: %6lu, data %02x -> %02x",
345 apip, tcp_echo_srv_info[six].cepid, rcount, (uint16_t)rblen, head, tail);
346#endif /* of #ifdef SHOW_RCV_RANGE */
347
348 rlen = (uint16_t)rblen;
349 total += rblen;
350 soff = 0;
351 while (rlen > 0) {
352
353 if ((sblen = tcp_get_buf(tcp_echo_srv_info[six].cepid, (void**)&sbuf, SND_TMO)) < 0) {
354 syslog(LOG_NOTICE, "[TES%c:%02u GET] error: %s",
355 apip, tcp_echo_srv_info[six].cepid, itron_strerror(sblen));
356 goto err_fin;
357 }
358
359 //syslog(LOG_NOTICE, "[TES%c:%02u SND] len: %7lu",
360 // apip, tcp_echo_srv_info[six].cepid, (uint16_t)sblen);
361 scount ++;
362 slen = rlen < (uint16_t)sblen ? rlen : (uint16_t)sblen;
363 memcpy(sbuf, rbuf + soff, slen);
364 if ((error = tcp_snd_buf(tcp_echo_srv_info[six].cepid, slen)) != E_OK) {
365 syslog(LOG_NOTICE, "[TES%c:%02u SND] error: %s",
366 apip, tcp_echo_srv_info[six].cepid, itron_strerror(error));
367 goto err_fin;
368 }
369#ifdef SHOW_RCV_RANGE
370 syslog(LOG_NOTICE, "[TES%c:%02u SND] scount: %4u, len: %4u",
371 apip, tcp_echo_srv_info[six].cepid, scount, slen);
372#endif /* of #ifdef SHOW_RCV_RANGE */
373
374 rlen -= slen;
375 soff += slen;
376 }
377
378 if ((error = tcp_rel_buf(tcp_echo_srv_info[six].cepid, rblen)) < 0) {
379 syslog(LOG_NOTICE, "[TES%c:%02u REL] error: %s",
380 apip, tcp_echo_srv_info[six].cepid, itron_strerror(error));
381 break;
382 }
383 }
384err_fin:
385
386#ifdef USE_TCP_SHT_CEP
387 if ((error = tcp_sht_cep(tcp_echo_srv_info[six].cepid)) != E_OK)
388 syslog(LOG_NOTICE, "[TES%c:%02u SHT] error: %s",
389 apip, tcp_echo_srv_info[six].cepid, itron_strerror(error));
390#endif /* of #ifdef USE_TCP_SHT_CEP */
391
392 if ((error = tcp_cls_cep(tcp_echo_srv_info[six].cepid, CLS_TMO)) != E_OK)
393 syslog(LOG_NOTICE, "[TES%c:%02u CLS] error: %s",
394 apip, tcp_echo_srv_info[six].cepid, itron_strerror(error));
395
396 syscall(get_tim(&now));
397#if 1
398 syslog(LOG_NOTICE, "[TES%c:%02u FIN] finsh: %7lu, ttl: %lu",
399 apip, tcp_echo_srv_info[six].cepid, now / SYSTIM_HZ, total);
400#else
401 syslog(LOG_NOTICE, "[TES%c:%02u FIN] finsh: %7lu, ttl: %lu, error: %s",
402 apip, tcp_echo_srv_info[six].cepid, now / SYSTIM_HZ, total, itron_strerror(error));
403#endif
404
405 return error;
406 }
407
408#else /* of #ifdef USE_COPYSAVE_API */
409
410/*
411 * tcp_echo_srv -- TCP エコーサーバ
412 *
413 * USE_TCP_NON_BLOCKING OFF
414 * USE_COPYSAVE_API OFF
415 */
416
417ER
418tcp_echo_srv (uint_t six, char apip)
419{
420 ID cepid;
421 ER error = E_OK;
422 ER_UINT rlen, slen;
423 SYSTIM now;
424 uint32_t total;
425 uint16_t soff, scount, rcount;
426
427 if ((error = tcp_passive_open(&tcp_echo_srv_info[six], apip)) != E_OK) {
428 syslog(LOG_NOTICE, "[TES%c:%02u OPN] error: %s",
429 apip, tcp_echo_srv_info[six].cepid, itron_strerror(error));
430 return error;
431 }
432
433 syscall(get_tim(&now));
434
435#if defined(SUPPORT_INET6) && defined(SUPPORT_INET4)
436
437 if (apip == API_PROTO_IPV6)
438 syslog(LOG_NOTICE, "[TES6:%02u ACP] conct: %7lu,from: %s.%u",
439 tcp_echo_srv_info[six].cepid, now / SYSTIM_HZ,
440 ipv62str(NULL, &tcp_echo_srv_info[six].dst.ipaddr),
441 tcp_echo_srv_info[six].dst.portno);
442 else {
443 T_IN4_ADDR addr;
444
445 addr = ntohl(tcp_echo_srv_info[six].dst.ipaddr.s6_addr32[3]);
446 syslog(LOG_NOTICE, "[TES4:%02u ACP] conct: %7lu,from: %s.%u",
447 tcp_echo_srv_info[six].cepid, now / SYSTIM_HZ,
448 ip2str(NULL, &addr), tcp_echo_srv_info[six].dst.portno);
449 }
450
451#else /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */
452
453 syslog(LOG_NOTICE, "[TES%c:%02u ACP] conct: %7lu,from: %s.%u",
454 apip, tcp_echo_srv_info[six].cepid, now / SYSTIM_HZ,
455 IP2STR(NULL, &tcp_echo_srv_info[six].dst.ipaddr),
456 tcp_echo_srv_info[six].dst.portno);
457
458#endif /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */
459
460 cepid = tcp_echo_srv_info[six].cepid;
461 scount = rcount = total = 0;
462 while (true) {
463 if ((rlen = tcp_rcv_dat(cepid, tcp_echo_srv_info[six].buffer, BUF_SIZE - 1, RCV_TMO)) <= 0) {
464 if (rlen != E_OK)
465 syslog(LOG_NOTICE, "[TES%c:%02u RCV] error: %s",
466 apip, cepid, itron_strerror(rlen));
467 break;
468 }
469
470 rcount ++;
471#ifdef SHOW_RCV_RANGE
472 syslog(LOG_NOTICE, "[TES%c:%02u RCV] rcount: %4u, len: %4u, data %02x -> %02x",
473 apip, cepid, rcount,
474 (uint16_t)rlen, * tcp_echo_srv_info[six].tcp_echo_srv_info[six].buffer,
475 *(tcp_echo_srv_info[six].tcp_echo_srv_info[six].buffer + rlen - 1));
476#endif /* of #ifdef SHOW_RCV_RANGE */
477
478 total += rlen;
479 soff = 0;
480 while (rlen > 0) {
481 scount ++;
482 if ((slen = tcp_snd_dat(cepid, &tcp_echo_srv_info[six].buffer[soff], rlen, SND_TMO)) < 0) {
483 syslog(LOG_NOTICE, "[TES%c:%02u SND] error: %s",
484 apip, cepid, itron_strerror(slen));
485 goto err_fin;
486 }
487#ifdef SHOW_RCV_RANGE
488 syslog(LOG_NOTICE, "[TES%c:%02u SND] scount: %4u, len: %4u",
489 apip, cepid, scount, (uint16_t)slen);
490#endif /* of #ifdef SHOW_RCV_RANGE */
491
492 rlen -= slen;
493 soff += slen;
494 }
495 }
496err_fin:
497
498#ifdef USE_TCP_SHT_CEP
499 if ((error = tcp_sht_cep(cepid)) != E_OK)
500 syslog(LOG_NOTICE, "[TES%c:%02u SHT] error: %s",
501 apip, cepid, itron_strerror(error));
502#endif /* of #ifdef USE_TCP_SHT_CEP */
503
504 if ((error = tcp_cls_cep(cepid, CLS_TMO)) != E_OK)
505 syslog(LOG_NOTICE, "[TES%c:%02u CLS] error: %s",
506 apip, cepid, itron_strerror(error));
507
508 syscall(get_tim(&now));
509 syslog(LOG_NOTICE, "[TES%c:%02u FIN] finsh: %7lu, ttl: %lu",
510 apip, cepid, now / SYSTIM_HZ, total);
511
512 return error;
513 }
514
515#endif /* of #ifdef USE_COPYSAVE_API */
516
517#endif /* of #ifndef USE_TCP_NON_BLOCKING */
518
519#ifndef USE_TCP_EXTENTIONS
520
521/*
522 * tcp_echo_srv_task -- TCP エコーサーバタスク
523 */
524
525void
526tcp_echo_srv_task(intptr_t exinf)
527{
528 ID tskid, cepid;
529 ER error;
530 uint_t six;
531 char apip;
532
533 six = INDEX_SRV_INFO((ID)exinf);
534
535#if defined(SUPPORT_INET6)
536
537#if defined(SUPPORT_INET4) && defined(USE_TCP4_ECHO_SRV)
538
539 if (six >= NUM_TCP4_ECHO_SRV_TASKS)
540 apip = API_PROTO_IPV6;
541 else
542 apip = API_PROTO_IPV4;
543
544#else /* of #if defined(SUPPORT_INET4) && defined(USE_TCP4_ECHO_SRV) */
545
546 apip = API_PROTO_IPV6;
547
548#endif /* of #if defined(SUPPORT_INET4) && defined(USE_TCP4_ECHO_SRV) */
549
550#else /* of #if defined(SUPPORT_INET6) */
551
552 apip = API_PROTO_IPV4;
553
554#endif /* of #if defined(SUPPORT_INET6) */
555
556 syscall(get_tid(&tskid));
557 cepid = tcp_echo_srv_info[six].cepid;
558 syslog(LOG_NOTICE, "[TCP%c ECHO SRV:%d,%d] started.", apip, tskid, cepid);
559
560 while (true) {
561 while ((error = tcp_echo_srv(six, apip)) == E_OK)
562 ;
563 syslog(LOG_NOTICE, "[TES%c:%02u TSK] sleep 60[s], error: %s", apip, cepid, itron_strerror(error));
564 tslp_tsk(60 * 1000 * 1000);
565 syslog(LOG_NOTICE, "[TES%c:%02u TSK] resume.", apip, cepid);
566 }
567 }
568
569#endif /* of #ifndef USE_TCP_EXTENTIONS */
570
571#endif /* of #ifdef USE_TCP_ECHO_SRV1 */
Note: See TracBrowser for help on using the repository browser.