Ignore:
Timestamp:
May 22, 2019, 10:03:37 PM (5 years ago)
Author:
coas-nagasima
Message:

ビルドが通るよう更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • azure_iot_hub/trunk/asp3_dcre/tinet/netapp/tcp_echo_srv2.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r388 r389  
    55 *                   Tomakomai National College of Technology, JAPAN
    66 *
    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 è²¬ã™ã‚‹ã“と.
     7 *  上記著作権者は,以下の (1)~(4) の条件か,Free Software Foundation
     8 *  によって公表されている GNU General Public License の Version 2 に記
     9 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     10 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     11 *  利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次の条件を満たすこと.
     21 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     22 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     23 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     24 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
    3625 *
    37  *  本ソフトウェアは,無保証で提供されているものである.上記著作権è€
    38 ãŠ
    39  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
    40  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
    41  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
     26 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     27 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     28 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     29 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    4230 *
    4331 *  @(#) $Id$
     
    4533
    4634/*
    47  *  TCP ECHO サーバ #2
     35 *  TCP ECHO サーバ #2
    4836 *
    49  *    ・送受信タスク分離型
    50  *    ・ノンブロッキングコール
    51  *    ・IPv4/IPv6
     37 *    ・送受信タスク分離型
     38 *    ・ノンブロッキングコール
     39 *    IPv4/IPv6
    5240 */
    5341
     
    9179
    9280/*
    93  *  表示
     81 *  表示
    9482 */
    9583
     
    9785
    9886/*
    99  *  コネクション切断方法の指定
     87 *  コネクション切断方法の指定
    10088 */
    10189
     
    10391
    10492/*
    105  *  å
    106 ¨åŸŸå¤‰æ•°
    107  */
    108 
    109 /* TCP 送受信ウィンドバッファ */
     93 *  全域変数
     94 */
     95
     96/* TCP 送受信ウィンドバッファ */
    11097
    11198#ifndef TCP_CFG_SWBUF_CSAVE
     
    118105
    119106/*
    120  *  変数
    121  */
    122 
    123 /*
    124  *  注意:
     107 *  変数
     108 */
     109
     110/*
     111 *  注意:
    125112 *
    126  *    BUF_SIZE は TCP の
    127  *    送信ウインドウバッファサイズ + 受信ウインドウバッファサイズの
    128  *    3/2 倍以上の大きさがなければ、デッドロックする可能性がある。
     113 *    BUF_SIZE は TCP の
     114 *    送信ウインドウバッファサイズ + 受信ウインドウバッファサイズの
     115 *    3/2 倍以上の大きさがなければ、デッドロックする可能性がある。
    129116 */
    130117
     
    132119                          TCP_ECHO_SRV_RWBUF_SIZE) * 3 / 2)
    133120
    134 static char     buffer[BUF_SIZE];       /* バッファ         */
    135 
    136 static T_IPEP   dst;                    /* 接続相手         */
    137 static bool_t   ena_rcv;                /* 受信可能フラグ        */
    138 static char     *rptr = buffer;         /* 受信ポインタ           */
    139 static char     *sptr = buffer;         /* 送信ポインタ           */
    140 static uint32_t rcv_total;              /* 受信文字数              */
    141 static uint32_t snd_total;              /* 送信文字数              */
    142 static uint16_t chars;                  /* バッファå†
    143 ã®æ–‡å­—æ•°    */
    144 static uint16_t rcv_count;              /* 受信回数         */
    145 static uint16_t snd_count;              /* 送信回数         */
     121static char     buffer[BUF_SIZE];       /* バッファ         */
     122
     123static T_IPEP   dst;                    /* 接続相手         */
     124static bool_t   ena_rcv;                /* 受信可能フラグ      */
     125static char     *rptr = buffer;         /* 受信ポインタ               */
     126static char     *sptr = buffer;         /* 送信ポインタ               */
     127static uint32_t rcv_total;              /* 受信文字数                */
     128static uint32_t snd_total;              /* 送信文字数                */
     129static uint16_t chars;                  /* バッファ内の文字数    */
     130static uint16_t rcv_count;              /* 受信回数         */
     131static uint16_t snd_count;              /* 送信回数         */
    146132
    147133#ifdef USE_TCP_NON_BLOCKING
    148134
    149 static ER       rcv_error = E_OK;       /* 受信、ノンブロッキングコールエラー */
    150 static ER       snd_error = 1;          /* 送信、ノンブロッキングコールエラー */
    151 
    152 /*
    153  *  ノンブロッキングコールのコールバック関数
     135static ER       rcv_error = E_OK;       /* 受信、ノンブロッキングコールエラー */
     136static ER       snd_error = 1;          /* 送信、ノンブロッキングコールエラー */
     137
     138/*
     139 *  ノンブロッキングコールのコールバック関数
    154140 */
    155141
     
    197183                        syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
    198184
    199                         /* 送信ポインタを進める。*/
     185                        /* 送信ポインタを進める。*/
    200186                        if (sptr - buffer + slen >= sizeof(buffer))
    201187                                sptr -= sizeof(buffer) - slen;
     
    203189                                sptr += slen;
    204190
    205                         /* バッファå†
    206 ã®æ–‡å­—数を減らす。*/
     191                        /* バッファ内の文字数を減らす。*/
    207192                        last   = chars;
    208193                        chars -= slen;
    209194
    210                         /* バッファå†
    211 ã«æ–‡å­—があれば、送信タスクを起床する。*/
     195                        /* バッファ内に文字があれば、送信タスクを起床する。*/
    212196                        if (chars > 0 || (!ena_rcv && chars == 0))
    213197                                sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
    214198
    215                         /* 受信可能で、バッファå†
    216 ã«ç©ºããŒã§ãã‚Œã°ã€å—信タスクを起床する。*/
     199                        /* 受信可能で、バッファ内に空きができれば、受信タスクを起床する。*/
    217200                        if (ena_rcv && last == sizeof(buffer) && sizeof(buffer) - chars > 0)
    218201                                syscall(sig_sem(SEM_TCP_ECHO_SRV_RCV_READY));
     
    240223                        syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
    241224
    242                         /* 受信ポインタを進める。*/
     225                        /* 受信ポインタを進める。*/
    243226                        if (rptr - buffer + rlen >= sizeof(buffer))
    244227                                rptr -= sizeof(buffer) - rlen;
     
    246229                                rptr += rlen;
    247230
    248                         /* バッファå†
    249 ã®æ–‡å­—数を増やす。*/
     231                        /* バッファ内の文字数を増やす。*/
    250232                        last   = chars;
    251233                        chars += rlen;
    252234
    253                         /* バッファå†
    254 ã«æ–‡å­—がå
    255 ¥ã‚Œã°ã€é€ä¿¡ã‚¿ã‚¹ã‚¯ã‚’起床する。*/
     235                        /* バッファ内に文字が入れば、送信タスクを起床する。*/
    256236                        if (last == 0 && chars > 0)
    257237                                sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
    258238
    259                         /* バッファå†
    260 ã«ç©ºããŒã‚れば、受信タスクを起床する。*/
     239                        /* バッファ内に空きがあれば、受信タスクを起床する。*/
    261240                        if (sizeof(buffer) - chars > 0)
    262241                                sig_sem(SEM_TCP_ECHO_SRV_RCV_READY);
     
    293272
    294273/*
    295  *  TCP ECHO サーバ受信ルーチン (ノンブロッキングコール使用)
     274 *  TCP ECHO サーバ受信ルーチン (ノンブロッキングコール使用)
    296275 */
    297276
     
    312291                }
    313292
    314         /* コネクション開設完了までå¾
    315 ã¤ã€‚*/
     293        /* コネクション開設完了まで待つ。*/
    316294        syscall(wai_sem(SEM_TCP_ECHO_SRV_RCV_READY));
    317295
    318         /* å¾
    319 ã£ã¦ã„る間にエラーになったら、コネクションの開設å¾
    320 ã¡ã«æˆ»ã‚‹ã€‚*/
     296        /* 待っている間にエラーになったら、コネクションの開設待ちに戻る。*/
    321297        if (rcv_error != E_OK)
    322298                return rcv_error;
     
    331307        while (true) {
    332308
    333                 /* 受信サイズを計算する。*/
     309                /* 受信サイズを計算する。*/
    334310                syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
    335311                if (sptr > rptr)
     
    339315                syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
    340316
    341                 /* 受信する。*/
     317                /* 受信する。*/
    342318                if ((error = tcp_rcv_dat(cepid, rptr, blen, TMO_NBLK)) != E_WBLK) {
    343319                        syslog(LOG_NOTICE, "[TES:%02u RCV] recv error = %s", cepid, itron_strerror(error));
     
    345321                        }
    346322
    347                 /* 受信バッファに空ができるまでå¾
    348 ã¤ã€‚*/
     323                /* 受信バッファに空ができるまで待つ。*/
    349324                syscall(wai_sem(SEM_TCP_ECHO_SRV_RCV_READY));
    350325
    351                 /* å¾
    352 ã£ã¦ã„る間に、受信文字数が 0 になるか、エラーになったら終了する。*/
     326                /* 待っている間に、受信文字数が 0 になるか、エラーになったら終了する。*/
    353327                if (rcv_error <= 0)
    354328                        break;
     
    356330                }
    357331
    358         /* 受信完了 */
     332        /* 受信完了 */
    359333        ena_rcv = false;
    360334
    361         /* 受信バッファに文字がå
    362 ¥ã‚‹ã®ã‚’å¾
    363 ã£ã¦ã„る送信タスクを起床する。*/
     335        /* 受信バッファに文字が入るのを待っている送信タスクを起床する。*/
    364336        if (chars == 0)
    365337                sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
    366338
    367         /* コネクション切断完了までå¾
    368 ã¤ã€‚*/
     339        /* コネクション切断完了まで待つ。*/
    369340        syscall(wai_sem(SEM_TCP_ECHO_SRV_CLS_READY));
    370341
     
    373344
    374345/*
    375  *  TCP ECHO サーバ送信タスク (ノンブロッキングコール使用)
     346 *  TCP ECHO サーバ送信タスク (ノンブロッキングコール使用)
    376347 */
    377348
     
    394365                while (true) {
    395366
    396                         /* バッファに文字がå
    397 ¥ã‚‹ã¾ã§å¾
    398 ã¤ã€‚*/
     367                        /* バッファに文字が入るまで待つ。*/
    399368                        syscall(wai_sem(SEM_TCP_ECHO_SRV_SND_READY));
    400369
    401                         /* å¾
    402 ã£ã¦ã„る間にエラーになったら終了する。*/
     370                        /* 待っている間にエラーになったら終了する。*/
    403371                        if (snd_error <= 0)
    404372                                break;
    405373
    406                         /* 受信完了で、バッファに文字がなければ終了する。*/
     374                        /* 受信完了で、バッファに文字がなければ終了する。*/
    407375                        if (!ena_rcv && chars == 0)
    408376                                break;
    409377
    410                         /* 送信サイズを計算する。*/
     378                        /* 送信サイズを計算する。*/
    411379                        syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
    412380                        if (rptr > sptr)
     
    416384                        syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
    417385
    418                         /* 送信する。*/
     386                        /* 送信する。*/
    419387                        if ((error = tcp_snd_dat(cepid, sptr, blen, TMO_NBLK)) != E_WBLK) {
    420388                                syslog(LOG_NOTICE, "[TES:%02u SND] send error = %s", cepid, itron_strerror(error));
     
    423391                        }
    424392
    425                 /* 受信バッファに空ができるをå¾
    426 ã£ã¦ã„る受信タスクを起床する。*/
     393                /* 受信バッファに空ができるを待っている受信タスクを起床する。*/
    427394                if (chars == sizeof(buffer))
    428395                        sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
     
    445412
    446413/*
    447  *  TCP ECHO サーバ受信ルーチン
     414 *  TCP ECHO サーバ受信ルーチン
    448415 */
    449416
     
    482449        while (true) {
    483450
    484                 /* 受信サイズを計算する。*/
     451                /* 受信サイズを計算する。*/
    485452                syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
    486453                if (sptr > rptr)
     
    490457                syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
    491458
    492                 /* 受信する。*/
     459                /* 受信する。*/
    493460                if ((rlen = tcp_rcv_dat(cepid, rptr, blen, TMO_FEVR)) <= 0) {
    494461                        if (rlen < 0)
     
    508475                syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
    509476
    510                 /* 受信ポインタを進める。*/
     477                /* 受信ポインタを進める。*/
    511478                if (rptr - buffer + rlen >= sizeof(buffer))
    512479                        rptr -= sizeof(buffer) - rlen;
     
    514481                        rptr += rlen;
    515482
    516                 /* バッファå†
    517 ã®æ–‡å­—数を増やす。*/
     483                /* バッファ内の文字数を増やす。*/
    518484                last   =     chars;
    519485                chars += (uint16_t)rlen;
    520486
    521                                 /* バッファå†
    522 ã«æ–‡å­—がå
    523 ¥ã‚Œã°ã€é€ä¿¡ã‚¿ã‚¹ã‚¯ã‚’起床する。*/
     487                                /* バッファ内に文字が入れば、送信タスクを起床する。*/
    524488                if (last == 0 && chars > 0)
    525489                        sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
    526490
    527                                 /* バッファå†
    528 ã«ç©ºããŒã‚れば、受信タスクを起床する。*/
     491                                /* バッファ内に空きがあれば、受信タスクを起床する。*/
    529492                if (sizeof(buffer) - chars > 0)
    530493                        sig_sem(SEM_TCP_ECHO_SRV_RCV_READY);
     
    532495                syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
    533496
    534                 /* バッファに空きができるまでå¾
    535 ã¤ã€‚*/
     497                /* バッファに空きができるまで待つ。*/
    536498                syscall(wai_sem(SEM_TCP_ECHO_SRV_RCV_READY));
    537499                }
    538500
    539         /* 受信完了 */
     501        /* 受信完了 */
    540502        ena_rcv = false;
    541503
    542         /* 受信バッファに文字がå
    543 ¥ã‚‹ã®ã‚’å¾
    544 ã£ã¦ã„る送信タスクを起床する。*/
     504        /* 受信バッファに文字が入るのを待っている送信タスクを起床する。*/
    545505        if (chars == 0)
    546506                sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
    547507
    548         /* コネクションの切断が完了するまでå¾
    549 ã¤ã€‚*/
     508        /* コネクションの切断が完了するまで待つ。*/
    550509        syscall(wai_sem(SEM_TCP_ECHO_SRV_CLS_READY));
    551510
     
    554513
    555514/*
    556  *  TCP ECHO サーバ送信タスク
     515 *  TCP ECHO サーバ送信タスク
    557516 */
    558517
     
    578537                while (true) {
    579538
    580                         /* バッファに文字がå
    581 ¥ã‚‹ã¾ã§å¾
    582 ã¤ã€‚*/
     539                        /* バッファに文字が入るまで待つ。*/
    583540                        syscall(wai_sem(SEM_TCP_ECHO_SRV_SND_READY));
    584541
    585                         /* 受信完了で、バッファに文字がなければ終了する。*/
     542                        /* 受信完了で、バッファに文字がなければ終了する。*/
    586543                        if (!ena_rcv && chars == 0)
    587544                                break;
    588545
    589                         /* 送信サイズを計算する。*/
     546                        /* 送信サイズを計算する。*/
    590547                        syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
    591548                        if (rptr > sptr)
     
    611568                        syscall(wai_sem(SEM_TCP_ECHO_SRV_LOCK));
    612569
    613                         /* 送信ポインタを進める。*/
     570                        /* 送信ポインタを進める。*/
    614571                        if (sptr - buffer + slen >= sizeof(buffer))
    615572                                sptr -= sizeof(buffer) - slen;
     
    617574                                sptr += slen;
    618575
    619                         /* バッファå†
    620 ã®æ–‡å­—数を減らす。*/
     576                        /* バッファ内の文字数を減らす。*/
    621577                        last   =     chars;
    622578                        chars -= (uint16_t)slen;
    623579
    624                         /* 受信完了で、バッファに文字がなければ終了する。*/
     580                        /* 受信完了で、バッファに文字がなければ終了する。*/
    625581                        if (!ena_rcv && chars == 0) {
    626582                                syscall(sig_sem(SEM_TCP_ECHO_SRV_LOCK));
     
    628584                                }
    629585
    630                         /* バッファå†
    631 ã«æ–‡å­—があれば、送信タスクを起床する。*/
     586                        /* バッファ内に文字があれば、送信タスクを起床する。*/
    632587                        if (chars > 0)
    633588                                sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
    634589
    635                         /* 受信可能で、バッファå†
    636 ã«ç©ºããŒã§ãã‚Œã°ã€å—信タスクを起床する。*/
     590                        /* 受信可能で、バッファ内に空きができれば、受信タスクを起床する。*/
    637591                        if (ena_rcv && last == sizeof(buffer) && sizeof(buffer) - chars > 0)
    638592                                sig_sem(SEM_TCP_ECHO_SRV_RCV_READY);
     
    641595                        }
    642596
    643                 /* 受信バッファに空ができるをå¾
    644 ã£ã¦ã„る受信タスクを起床する。*/
     597                /* 受信バッファに空ができるを待っている受信タスクを起床する。*/
    645598                if (chars == sizeof(buffer))
    646599                        sig_sem(SEM_TCP_ECHO_SRV_SND_READY);
     
    670623
    671624/*
    672  *  get_tcp_rep -- TCP 受付口を獲得する。
     625 *  get_tcp_rep -- TCP 受付口を獲得する。
    673626 */
    674627
     
    696649
    697650/*
    698  *  get_tcp_cep -- TCP 通信端点を獲得する。
     651 *  get_tcp_cep -- TCP 通信端点を獲得する。
    699652 */
    700653
     
    731684
    732685/*
    733  *  TCP ECHO サーバ受信タスク
     686 *  TCP ECHO サーバ受信タスク
    734687 */
    735688
Note: See TracChangeset for help on using the changeset viewer.