void tcp_echo_srv_task(intptr_t exinf) { ID tskid; ER_UINT rlen, slen; ER error = E_OK; uint16_t soff, count, total; get_tid(&tskid); syslog(LOG_NOTICE, "[TCP ECHO SRV:%d,%d] started.", tskid, (int_t)exinf); while (true) { if (tcp_acp_cep((int_t)exinf, TCP_ECHO_SRV_REPID, &dst, TMO_FEVR) != E_OK) { syslog(LOG_NOTICE, "[TCP ECHO SRV ACP] error: %s", itron_strerror(error)); continue; } total = count = 0; syslog(LOG_NOTICE, "[TCP ECHO SRV ACP] connected from %s:%d", ip2str(NULL, &dst.ipaddr), dst.portno); while (true) { if ((rlen = tcp_rcv_dat((int_t)exinf, buffer, BUF_SIZE - 1, TMO_FEVR)) <= 0) { if (rlen != E_OK) syslog(LOG_NOTICE, "[TCP ECHO SRV RCV] error: %s", itron_strerror(rlen)); break; } /*syslog(LOG_NOTICE, "[TCP ECHO SRV RCV] count: %4d, len: %4d, data %02x -> %02x", ++ count, (uint16_t)rlen, *buffer, *(buffer + rlen - 1));*/ count ++; total += (uint16_t)rlen; soff = 0; while (rlen > 0) { if ((slen = tcp_snd_dat((int_t)exinf, &buffer[soff], rlen, TMO_FEVR)) < 0) { syslog(LOG_NOTICE, "[TCP ECHO SRV SND] error: %s", itron_strerror(slen)); goto err_fin; } /*syslog(LOG_NOTICE, "[TCP ECHO SRV SND] len: %d", slen);*/ rlen -= slen; soff += (uint16_t)slen; } } err_fin: if ((error = tcp_sht_cep((int_t)exinf)) != E_OK) syslog(LOG_NOTICE, "[TCP ECHO SRV SHT] error: %s", itron_strerror(error)); if ((error = tcp_cls_cep((int_t)exinf, TMO_FEVR)) != E_OK) syslog(LOG_NOTICE, "[TCP ECHO SRV CLS] error: %s", itron_strerror(error)); syslog(LOG_NOTICE, "[TCP ECHO SRV FIN] finished, total cnt: %d, len: %d", count, total); } }
/* #[<ENTRY_FUNC>]# eC0_send * name: eC0_send * global_name: tTINETClient_eC0_send * oneway: false * #[</ENTRY_FUNC>]# */ ER eC0_send(CELLIDX idx, const int8_t* buf, int16_t size, TMO tmo) { ER ercd = E_OK; CELLCB *p_cellcb; int sz; if (VALID_IDX(idx)) { p_cellcb = GET_CELLCB(idx); } else { return(E_ID); } /* ここに処理本体を記述します */ #ifdef DEBUG syslog( LOG_INFO, "tTINETServer: send" ); { int i; for( i = 0; i < size; i++ ){ printf( "%02X ", (unsigned char)buf[i] ); if( i % 8 == 7 ) putchar( '\n' ); } putchar( '\n' ); } #endif while(size>0){ if((sz=tcp_snd_dat( ATTR_cep_id, (intptr_t *)buf, (size_t)size, tmo )) < 0 ){ ercd = sz; break; } else{ size -= sz; } } return(ercd); }
static ER tcp_echo_srv (ID cepid, ID repid) { ER_UINT rlen, slen; ER error = E_OK; SYSTIM now; uint32_t total; uint16_t soff, scount, rcount; if ((error = TCP_ACP_CEP(cepid, repid, &dst, TMO_FEVR)) != E_OK) { syslog(LOG_NOTICE, "[TES:%02d ACP] error: %s", cepid, itron_strerror(error)); return error; } #ifdef USE_TCP_EXTENTIONS if ((error = free_tcp_rep(repid, true)) != E_OK) syslog(LOG_NOTICE, "[TES:%02d DEL] REP delete error: %s", cepid, itron_strerror(error)); #endif /* of #ifdef USE_TCP_EXTENTIONS */ scount = rcount = total = 0; syscall(get_tim(&now)); syslog(LOG_NOTICE, "[TES:%02d ACP] connected: %6lu, from: %s.%u", cepid, now / SYSTIM_HZ, IP2STR(NULL, &dst.ipaddr), dst.portno); while (true) { if ((rlen = tcp_rcv_dat(cepid, buffer, BUF_SIZE - 1, RCV_TMO)) <= 0) { if (rlen != E_OK) syslog(LOG_NOTICE, "[TES:%02d RCV] error: %s", cepid, itron_strerror(rlen)); break; } rcount ++; #ifdef SHOW_RCV_RANGE syslog(LOG_NOTICE, "[TES:%02d RCV] rcount: %4d, len: %4d, data %02x -> %02x", cepid, rcount, (uint16_t)rlen, *buffer, *(buffer + rlen - 1)); #endif /* of #ifdef SHOW_RCV_RANGE */ total += rlen; soff = 0; while (rlen > 0) { scount ++; if ((slen = tcp_snd_dat(cepid, &buffer[soff], rlen, SND_TMO)) < 0) { syslog(LOG_NOTICE, "[TES:%02d SND] error: %s", cepid, itron_strerror(slen)); goto err_fin; } #ifdef SHOW_RCV_RANGE syslog(LOG_NOTICE, "[TES:%02d SND] scount: %4d, len: %4d", cepid, scount, (uint16_t)slen); #endif /* of #ifdef SHOW_RCV_RANGE */ rlen -= slen; soff += slen; } } err_fin: #ifdef USE_TCP_SHT_CEP if ((error = tcp_sht_cep(cepid)) != E_OK) syslog(LOG_NOTICE, "[TES:%02d SHT] error: %s", cepid, itron_strerror(error)); #endif /* of #ifdef USE_TCP_SHT_CEP */ if ((error = tcp_cls_cep(cepid, CLS_TMO)) != E_OK) syslog(LOG_NOTICE, "[TES:%02d CLS] error: %s", cepid, itron_strerror(error)); syscall(get_tim(&now)); syslog(LOG_NOTICE, "[TES:%02d FIN] finished: %6lu, snd: %4u, rcv: %4u, len: %lu", cepid, now / SYSTIM_HZ, scount, rcount, total); return error; }
static ER tcp_echo_srv (ID cepid, ID repid) { SYSTIM now; ER error; uint32_t total; uint16_t rlen, slen, soff, scount, rcount; char head, tail; if ((error = TCP_ACP_CEP(cepid, repid, &dst, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TES:%02d ACP] error: %s", cepid, itron_strerror(error)); return error; } /* 相手から接続されるまで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_NBLK_READY)); if (nblk_error == E_OK) { syscall(get_tim(&now)); syslog(LOG_NOTICE, "[TES:%02d ACP] connected: %6lu, from: %s.%u", cepid, now / SYSTIM_HZ, IP2STR(NULL, &dst.ipaddr), dst.portno); } else { syslog(LOG_NOTICE, "[TES:%02d ACP] error: %s", cepid, itron_strerror(nblk_error)); return nblk_error; } #ifdef USE_TCP_EXTENTIONS if ((error = free_tcp_rep(repid, true)) != E_OK) syslog(LOG_NOTICE, "[TES:%02d DEL] REP delete error: %s", cepid, itron_strerror(error)); #endif /* of #ifdef USE_TCP_EXTENTIONS */ scount = rcount = total = 0; while (true) { if ((error = tcp_rcv_dat(cepid, buffer, BUF_SIZE - 1, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TES:%02d RCV] error: %s", cepid, itron_strerror(error)); break; } /* 受信完了まで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_NBLK_READY)); if (nblk_rlen < 0) { syslog(LOG_NOTICE, "[TES:%02d RCV] error: %s", cepid, itron_strerror(nblk_rlen)); break; } else if (nblk_rlen == 0) break; rlen = nblk_rlen; head = *buffer; tail = *(buffer + rlen - 1); rcount ++; #ifdef SHOW_RCV_RANGE syslog(LOG_NOTICE, "[TES:%02d RCV] rcount: %4d, len: %4d, data %02x -> %02x", cepid, rcount, rlen, head, tail); #endif /* of #ifdef SHOW_RCV_RANGE */ total += rlen; soff = 0; while (rlen > 0) { scount ++; if ((error = tcp_snd_dat(cepid, &buffer[soff], rlen, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TES:%02d SND] error: %s", cepid, itron_strerror(error)); goto err_fin; } /* 送信完了まで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_NBLK_READY)); if (nblk_slen < 0) { syslog(LOG_NOTICE, "[TES:%02d SND] error: %s", cepid, itron_strerror(nblk_slen)); goto err_fin; } slen = nblk_slen; #ifdef SHOW_RCV_RANGE syslog(LOG_NOTICE, "[TES:%02d SND] scount: %4d, len: %4d", cepid, scount, slen); #endif /* of #ifdef SHOW_RCV_RANGE */ rlen -= slen; soff += slen; } } err_fin: #ifdef USE_TCP_SHT_CEP if ((error = tcp_sht_cep(cepid)) != E_OK) syslog(LOG_NOTICE, "[TES:%02d SHT] error: %s", cepid, itron_strerror(error)); #endif /* of #ifdef USE_TCP_SHT_CEP */ if ((error = tcp_cls_cep(cepid, TMO_NBLK)) != E_WBLK) syslog(LOG_NOTICE, "[TES:%02d CLS] error: %s", cepid, itron_strerror(error)); /* 開放が完了するまで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_NBLK_READY)); syscall(get_tim(&now)); syslog(LOG_NOTICE, "[TES:%02d FIN] finished: %6lu, snd: %4u, rcv: %4u, len: %lu", cepid, now / SYSTIM_HZ, scount, rcount, total); return error == E_WBLK ? E_OK : error; }
int cg_socket_write(CgSocket *sock, char *cmd, int cmdLen) { int nSent; int nTotalSent = 0; int cmdPos = 0; int retryCnt = 0; cg_log_debug_l4("Entering...\n"); if (cmdLen <= 0) return 0; do { #if defined(CG_USE_OPENSSL) if (cg_socket_isssl(sock) == FALSE) { #endif #if defined(BTRON) || (defined(TENGINE) && !defined(CG_TENGINE_NET_KASAGO)) nSent = so_send(sock->id, (B*)(cmd + cmdPos), cmdLen, 0); #elif defined(TENGINE) && defined(CG_TENGINE_NET_KASAGO) nSent = ka_send(sock->id, (B*)(cmd + cmdPos), cmdLen, 0); #elif defined(ITRON) nSent = tcp_snd_dat(sock->id, cmd + cmdPos, cmdLen, TMO_FEVR); #else nSent = send(sock->id, cmd + cmdPos, cmdLen, 0); #endif #if defined(CG_USE_OPENSSL) } else { nSent = SSL_write(sock->ssl, cmd + cmdPos, cmdLen); } #endif /* Try to re-send in case sending has failed */ if (nSent <= 0) { retryCnt++; if (CG_NET_SOCKET_SEND_RETRY_CNT < retryCnt) { /* Must reset this because otherwise return value is interpreted as something else than fault and this function loops forever */ nTotalSent = 0; break; } cg_wait(CG_NET_SOCKET_SEND_RETRY_WAIT_MSEC); } else { nTotalSent += nSent; cmdPos += nSent; cmdLen -= nSent; retryCnt = 0; } } while (0 < cmdLen); #ifdef SOCKET_DEBUG cg_log_debug_s("w %d : %s\n", nTotalSent, ((cmd != NULL) ? cmd : "")); #endif cg_log_debug_l4("Leaving...\n"); return nTotalSent; }
void tcp_telnet_srv_task(VP_INT exinf) { UW total; UH rlen, slen, soff, count, sblen, rblen; ID tskid; ER error; UB head, tail; T_IF_SOFTC *ic; get_tid(&tskid); syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK):%d,%d] started.", tskid, (INT)exinf); while (TRUE) { if ((error = tcp_acp_cep((INT)exinf, TCP_TELNET_SRV_REPID, &dst, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) ACP] error: %s", itron_strerror(error)); continue; } /* 相手から接続されるまで待つ。*/ syscall(wai_sem(SEM_TCP_TELNET_SRV_NBLK_READY)); if (nblk_error == E_OK) { syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) ACP] connected from %s:%d", ip2str(NULL, &dst.ipaddr), dst.portno); } else { syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) ACP] error: %s", itron_strerror(nblk_error)); continue; } connect = TRUE; count = total = 0; while (TRUE) { if ((error = tcp_rcv_dat((INT)exinf, buffer, BUF_SIZE - 1, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) RCV] error: %s", itron_strerror(error)); break; } /* 受信完了まで待つ。*/ syscall(wai_sem(SEM_TCP_TELNET_SRV_NRCV_READY)); if (nblk_rlen < 0) { syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) RCV] error: %s", itron_strerror(nblk_rlen)); break; } else if (nblk_rlen == 0) break; rlen = (UH)nblk_rlen; total += (UW)nblk_rlen; head = *buffer; tail = *(buffer + rlen - 1); count ++; /*syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) RCV] count: %4d, len: %4d, data %02x -> %02x", ++ count, rlen, head, tail);*/ soff = 0; while (rlen > 0) { sblen, telnet_copy(buffer + soff, buffer + soff, rlen, &rblen); if ((error = tcp_snd_dat((INT)exinf, &buffer[soff], sblen, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) SND] error: %s", itron_strerror(error)); goto err_fin; } /* 送信完了まで待つ。*/ syscall(wai_sem(SEM_TCP_TELNET_SRV_NSND_READY)); if (nblk_slen < 0) { syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) SND] error: %s", itron_strerror(nblk_slen)); goto err_fin; } else /*syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) SND] len: %4d", nblk_slen)*/; slen = (UH)nblk_slen; rlen -= rblen; soff += slen; } } err_fin: if ((error = tcp_sht_cep((INT)exinf)) != E_OK) syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) SHT] error: %s", itron_strerror(error)); if ((error = tcp_cls_cep((INT)exinf, TMO_NBLK)) != E_WBLK) syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) CLS] error: %s", itron_strerror(error)); connect = FALSE; /* 開放が完了するまで待つ。*/ syscall(wai_sem(SEM_TCP_TELNET_SRV_NBLK_READY)); syslog(LOG_NOTICE, "[TCP TELNET SRV (NBLK) FIN] finished, total cnt: %d, len: %d", count, total); } }
void tcp_echo_srv_task(intptr_t exinf) { ID tskid; ER error; uint32_t total; uint16_t rlen, slen, soff, count; char head, tail; get_tid(&tskid); syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK):%d,%d] started.", tskid, (int_t)exinf); while (true) { if ((error = tcp_acp_cep((int_t)exinf, TCP_ECHO_SRV_REPID, &dst, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) ACP] error: %s", itron_strerror(error)); continue; } /* 相手から接続されるまで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_NBLK_READY)); if (nblk_error == E_OK) { syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) ACP] connected from %s:%d", ip2str(NULL, &dst.ipaddr), dst.portno); } else { syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) ACP] error: %s", itron_strerror(nblk_error)); continue; } count = total = 0; while (true) { if ((error = tcp_rcv_dat((int_t)exinf, buffer, BUF_SIZE - 1, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) RCV] error: %s", itron_strerror(error)); break; } /* 受信完了まで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_NBLK_READY)); if (nblk_rlen < 0) { syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) RCV] error: %s", itron_strerror(nblk_rlen)); break; } else if (nblk_rlen == 0) break; rlen = (uint16_t)nblk_rlen; total += (uint32_t)nblk_rlen; head = *buffer; tail = *(buffer + rlen - 1); count ++; /*syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) RCV] count: %4d, len: %4d, data %02x -> %02x", ++ count, rlen, head, tail);*/ soff = 0; while (rlen > 0) { if ((error = tcp_snd_dat((int_t)exinf, &buffer[soff], rlen, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) SND] error: %s", itron_strerror(error)); goto err_fin; } /* 送信完了まで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_NBLK_READY)); if (nblk_slen < 0) { syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) SND] error: %s", itron_strerror(nblk_slen)); goto err_fin; } else /*syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) SND] len: %4d", nblk_slen)*/; slen = (uint16_t)nblk_slen; rlen -= slen; soff += slen; } } err_fin: if ((error = tcp_sht_cep((int_t)exinf)) != E_OK) syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) SHT] error: %s", itron_strerror(error)); if ((error = tcp_cls_cep((int_t)exinf, TMO_NBLK)) != E_WBLK) syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) CLS] error: %s", itron_strerror(error)); /* 開放が完了するまで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_NBLK_READY)); syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) FIN] finished, total cnt: %d, len: %d", count, total); } }
void tcp_echo_srv_snd_task(intptr_t exinf) { ID tskid, cepid; ER error; ER_UINT slen; SYSTIM now; uint16_t blen, last; char head, tail; get_tid(&tskid); syslog(LOG_NOTICE, "[TCP ECHO SRV SND:%d] started.", tskid); while (true) { if ((error = rcv_dtq(DTQ_TCP_ECHO_SRV_SND, (intptr_t*)&cepid)) != E_OK) { syslog(LOG_NOTICE, "[TES:%02d SND] sync error: %s", cepid, itron_strerror(error)); continue; } while (true) { /* バッファに文字が入るまで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_SND_READY)); /* 受信完了で、バッファに文字がなければ終了する。*/ if (!ena_rcv && chars == 0) break; /* 送信サイズを計算する。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK)); if (rptr > sptr) blen = rptr - sptr; else blen = sizeof(buffer) - (sptr - buffer); syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK)); if ((slen = tcp_snd_dat(cepid, sptr, blen, TMO_FEVR)) <= 0) { syslog(LOG_NOTICE, "[TES:%02d SND] send error = %s", cepid, itron_strerror(slen)); break; } head = *sptr; tail = *(sptr + slen - 1); #ifdef SHOW_RCV_RANGE syslog(LOG_NOTICE, "[TES:%02d SND] len: %4d, data %02x -> %02x", cepid, (uint16_t)slen, head, tail); #endif /* of #ifdef SHOW_RCV_RANGE */ snd_count ++; snd_total += slen; syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK)); /* 送信ポインタを進める。*/ if (sptr - buffer + slen >= sizeof(buffer)) sptr -= sizeof(buffer) - slen; else sptr += slen; /* バッファ内の文字数を減らす。*/ last = chars; chars -= (uint16_t)slen; /* 受信完了で、バッファに文字がなければ終了する。*/ if (!ena_rcv && chars == 0) { syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK)); break; } /* バッファ内に文字があれば、送信タスクを起床する。*/ if (chars > 0) sig_sem(SEM_TCP_ECHO_SRV_SND_READY); /* 受信可能で、バッファ内に空きができれば、受信タスクを起床する。*/ if (ena_rcv && last == sizeof(buffer) && sizeof(buffer) - chars > 0) sig_sem(SEM_TCP_ECHO_SRV_RCV_READY); syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK)); } /* 受信バッファに空ができるを待っている受信タスクを起床する。*/ if (chars == sizeof(buffer)) sig_sem(SEM_TCP_ECHO_SRV_SND_READY); #ifdef USE_TCP_SHT_CEP if ((error = tcp_sht_cep(cepid)) != E_OK) syslog(LOG_NOTICE, "[TES:%02d SND] shtudown error = %s", cepid, itron_strerror(error)); #endif /* of #ifdef USE_TCP_SHT_CEP */ if ((error = tcp_cls_cep(cepid, TMO_FEVR)) != E_OK) syslog(LOG_NOTICE, "[TES:%02d SND] close error = %s", cepid, itron_strerror(error)); get_tim(&now); syslog(LOG_NOTICE, "[TES:%02d SND] finished: %6ld, snd: %4d, rcv: %4d, len: %ld", cepid, now / SYSTIM_HZ, snd_count, rcv_count, snd_total); sig_sem(SEM_TCP_ECHO_SRV_CLS_READY); pol_sem(SEM_TCP_ECHO_SRV_SND_READY); pol_sem(SEM_TCP_ECHO_SRV_RCV_READY); } }
void tcp_echo_srv_snd_task(intptr_t exinf) { ER error; ID tskid, cepid; uint16_t blen; get_tid(&tskid); syslog(LOG_NOTICE, "[TCP ECHO SRV (NBLK) SND:%d] started.", tskid); while (true) { if ((error = rcv_dtq(DTQ_TCP_ECHO_SRV_SND, (intptr_t*)&cepid)) != E_OK) { syslog(LOG_NOTICE, "[TES:%02d SND] sync error: %s", cepid, itron_strerror(error)); continue; } while (true) { /* バッファに文字が入るまで待つ。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_SND_READY)); /* 待っている間にエラーになったら終了する。*/ if (snd_error <= 0) break; /* 受信完了で、バッファに文字がなければ終了する。*/ if (!ena_rcv && chars == 0) break; /* 送信サイズを計算する。*/ syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK)); if (rptr > sptr) blen = rptr - sptr; else blen = sizeof(buffer) - (sptr - buffer); syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK)); /* 送信する。*/ if ((error = tcp_snd_dat(cepid, sptr, blen, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TES:%02d SND] send error = %s", cepid, itron_strerror(error)); break; } } /* 受信バッファに空ができるを待っている受信タスクを起床する。*/ if (chars == sizeof(buffer)) sig_sem(SEM_TCP_ECHO_SRV_SND_READY); #ifdef USE_TCP_SHT_CEP if ((error = tcp_sht_cep(cepid)) != E_OK) syslog(LOG_NOTICE, "[TES:%02d SND] shutdown error = %s", cepid, itron_strerror(error)); #endif /* of #ifdef USE_TCP_SHT_CEP */ if ((error = tcp_cls_cep(cepid, TMO_NBLK)) != E_WBLK) { syslog(LOG_NOTICE, "[TES:%02d SND] close error = %s", cepid, itron_strerror(error)); } pol_sem(SEM_TCP_ECHO_SRV_SND_READY); pol_sem(SEM_TCP_ECHO_SRV_RCV_READY); } }