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/netinet/tcp_subr_ncs.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$
     
    130118
    131119/*
    132  *  TCP 通信端点の送信ウィンドバッファの省コピー機能が無効
    133  */
    134 
    135 /*
    136  *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す。
     120 *  TCP 通信端点の送信ウィンドバッファの省コピー機能が無効
     121 */
     122
     123/*
     124 *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す。
    137125 */
    138126
     
    144132        uint_t  hdr_offset = IF_IP_TCP_HDR_OFFSET(output);
    145133
    146         /* SDU の大きさをチェックする。*/
     134        /* SDU の大きさをチェックする。*/
    147135        if (sdu_size < GET_TCP_HDR_SIZE(output, hdr_offset) + len) {
    148136                syslog(LOG_INFO, "[TCP] shrink SUD len: %d -> %d",
     
    153141        wptr = GET_TCP_SDU(output, hdr_offset);
    154142
    155         /* 通信端点をロックする。*/
     143        /* 通信端点をロックする。*/
    156144        syscall(wai_sem(cep->semid_lock));
    157145
     
    159147        if (rptr - (uint8_t*)cep->sbuf > cep->sbufsz) {
    160148
    161                 /* 転送開始が送信ウィンドバッファの終わりをè¶
    162 ãˆã‚‹ã¨ãã®å‡¦ç†ã€€*/
     149                /* 転送開始が送信ウィンドバッファの終わりを超えるときの処理 */
    163150                rptr = (uint8_t*)cep->sbuf_rptr - (cep->sbufsz - doff);
    164151                }
     
    166153                uint_t sub;
    167154
    168                 /* 転送範囲がラウンドするときの処理 */
     155                /* 転送範囲がラウンドするときの処理 */
    169156                sub = (uint_t)(cep->sbufsz - (rptr - (uint8_t*)cep->sbuf));
    170157                memcpy((void*)wptr, rptr, (size_t)sub);
     
    178165        NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_DATA_OCTETS], len);
    179166
    180         /* 通信端点のロックを解除する。*/
     167        /* 通信端点のロックを解除する。*/
    181168        syscall(sig_sem(cep->semid_lock));
    182169        }
    183170
    184171/*
    185  *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する。
     172 *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する。
    186173 */
    187174
     
    191178        uint_t  last;
    192179
    193         /* 通信端点をロックする。*/
     180        /* 通信端点をロックする。*/
    194181        syscall(wai_sem(cep->semid_lock));
    195182
     
    197184
    198185        if (cep->sbuf_rptr + len > (uint8_t*)cep->sbuf + cep->sbufsz)
    199                 /* ラウンドするときの計算 */
     186                /* ラウンドするときの計算 */
    200187                cep->sbuf_rptr -= cep->sbufsz - len;
    201188        else
     
    203190        cep->swbuf_count -= (uint16_t)len;
    204191
    205         /* 通信端点のロックを解除する。*/
     192        /* 通信端点のロックを解除する。*/
    206193        syscall(sig_sem(cep->semid_lock));
    207194
    208195#ifdef TCP_CFG_NON_BLOCKING
    209196
    210         if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) {     /* ノンブロッキングコール */
    211 
    212                 /* 通信端点をロックする。*/
     197        if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) {     /* ノンブロッキングコール */
     198
     199                /* 通信端点をロックする。*/
    213200                syscall(wai_sem(cep->semid_lock));
    214201
    215                 /* 送信データ長を計算する。*/
     202                /* 送信データ長を計算する。*/
    216203                if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf))
    217                         /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
     204                        /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
    218205                        len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf));
    219206                else
    220207                        len = cep->sbufsz - cep->swbuf_count;
    221208
    222                 /* 通信端点のロックを解除する。*/
     209                /* 通信端点のロックを解除する。*/
    223210                syscall(sig_sem(cep->semid_lock));
    224211
    225212                if (len > 0) {
    226213
    227                         /* tcp_get_buf の割当て長を設定する。*/
     214                        /* tcp_get_buf の割当て長を設定する。*/
    228215                        cep->get_buf_len = len;
    229216
    230                         /* 送信ウィンドバッファのアドレスを返す。*/
     217                        /* 送信ウィンドバッファのアドレスを返す。*/
    231218                        *cep->snd_p_buf = cep->sbuf_wptr;
    232219
     
    241228                                syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
    242229
    243                         /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     230                        /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    244231                        cep->snd_tskid = TA_NULL;
    245232                        cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    250237
    251238        else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT ||
    252                  cep->snd_nblk_tfn == TFN_TCP_SND_OOB) {        /* ノンブロッキングコール */
     239                 cep->snd_nblk_tfn == TFN_TCP_SND_OOB) {        /* ノンブロッキングコール */
    253240
    254241#else   /* of #ifdef TCP_CFG_EXTENTIONS */
    255242
    256         else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) {        /* ノンブロッキングコール */
     243        else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) {        /* ノンブロッキングコール */
    257244
    258245#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
     
    260247                ER_UINT error;
    261248
    262                 /* 送信ウィンドバッファにデータを書き込む。*/
     249                /* 送信ウィンドバッファにデータを書き込む。*/
    263250                error = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len);
    264251
    265252#ifdef TCP_CFG_EXTENTIONS
    266253
    267                 /* 送信緊急ポインタを設定する。*/
     254                /* 送信緊急ポインタを設定する。*/
    268255                if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB)
    269256                        cep->snd_up = cep->snd_una + error;
     
    281268                        syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
    282269
    283                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     270                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    284271                cep->snd_tskid = TA_NULL;
    285272                cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    289276#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    290277
    291                 /* 送信ウィンドバッファに空きが出来たら出力タスクを起床する。*/
     278                /* 送信ウィンドバッファに空きが出来たら出力タスクを起床する。*/
    292279                if (last == cep->sbufsz && cep->swbuf_count < cep->sbufsz)
    293280                        syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
     
    300287
    301288        if (cep->swbuf_count > 0) {
    302                 /* 送信ウィンドバッファにデータがあれば出力をポストする。*/
     289                /* 送信ウィンドバッファにデータがあれば出力をポストする。*/
    303290                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    304291                sig_sem(SEM_TCP_POST_OUTPUT);
     
    307294
    308295/*
    309  *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む。
     296 *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む。
    310297 */
    311298
     
    315302        uint_t  offset;
    316303
    317         /* 通信端点をロックする。*/
     304        /* 通信端点をロックする。*/
    318305        syscall(wai_sem(cep->semid_lock));
    319306
    320         /* len と送信ウィンドバッファの空きの小さい方を移すデータ数にする。*/
     307        /* len と送信ウィンドバッファの空きの小さい方を移すデータ数にする。*/
    321308        if (len > (cep->sbufsz - cep->swbuf_count))
    322309                len = cep->sbufsz - cep->swbuf_count;
    323310
    324         /* 書き込みポインタがラウンドするときの処理 */
     311        /* 書き込みポインタがラウンドするときの処理 */
    325312        if (len > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) {
    326313                offset = (uint_t)(cep->sbufsz - (cep->sbuf_wptr -(uint8_t*)cep->sbuf));
     
    336323        cep->swbuf_count += len - offset;
    337324
    338         /* 通信端点のロックを解除する。*/
     325        /* 通信端点のロックを解除する。*/
    339326        syscall(sig_sem(cep->semid_lock));
    340327
     
    343330
    344331/*
    345  *  tcp_wait_swbuf -- 送信ウィンドバッファが空くのをå¾
    346 ã¤ã€‚
     332 *  tcp_wait_swbuf -- 送信ウィンドバッファが空くのを待つ。
    347333 */
    348334
     
    355341        while (cep->swbuf_count >= cep->sbufsz) {
    356342                /*
    357                  *  送信ウィンドバッファの空きがなければ、出力をポストして、
    358                  *  送信ウィンドバッファが空くまでå¾
    359 ã¤ã€‚
     343                 *  送信ウィンドバッファの空きがなければ、出力をポストして、
     344                 *  送信ウィンドバッファが空くまで待つ。
    360345                 */
    361346                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
     
    368353
    369354                /*
    370                  *  送信できるか、CEP の FSM 状æ
    371 ‹ã‚’見る。
    372                  *  送信ウィンドバッファが空くまでå¾
    373 ã¤é–“に、送信不能になった場合は、
    374                  *  コネクションが切断されたことを意味している。
     355                 *  送信できるか、CEP の FSM 状態を見る。
     356                 *  送信ウィンドバッファが空くまで待つ間に、送信不能になった場合は、
     357                 *  コネクションが切断されたことを意味している。
    375358                 */
    376359                if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) {
     
    382365        }
    383366/*
    384  *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する。
     367 *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する。
    385368 */
    386369
     
    390373        uint_t  len;
    391374
    392         /* 通信端点をロックする。*/
     375        /* 通信端点をロックする。*/
    393376        syscall(wai_sem(cep->semid_lock));
    394377
    395         /* 送信ウィンドバッファの空きアドレスのå
    396 ˆé ­ã‚’設定する。*/
     378        /* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/
    397379        *p_buf = cep->sbuf_wptr;
    398380
    399         /* 送信ウィンドバッファの空きサイズを計算する。*/
     381        /* 送信ウィンドバッファの空きサイズを計算する。*/
    400382        if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf))
    401                 /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
     383                /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
    402384                len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf));
    403385        else
    404386                len = cep->sbufsz - cep->swbuf_count;
    405387
    406         /* 通信端点のロックを解除する。*/
     388        /* 通信端点のロックを解除する。*/
    407389        syscall(sig_sem(cep->semid_lock));
    408390
    409         /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
     391        /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
    410392        cep->get_buf_len = len;
    411393        return (ER_UINT)len;
     
    413395
    414396/*
    415  *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする。
     397 *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする。
    416398 */
    417399
     
    419401tcp_send_swbuf_ncs (T_TCP_CEP *cep, uint_t len)
    420402{
    421         /* 通信端点をロックする。*/
     403        /* 通信端点をロックする。*/
    422404        syscall(wai_sem(cep->semid_lock));
    423405
     
    425407        cep->swbuf_count += len;
    426408
    427         /* 書込みポインタがラウンドするときの処理 */
     409        /* 書込みポインタがラウンドするときの処理 */
    428410        if (cep->sbuf_wptr >= (uint8_t*)cep->sbuf + cep->sbufsz)
    429411                cep->sbuf_wptr  = (uint8_t*)cep->sbuf;
    430412
    431         /* tcp_get_buf の割当て長をリセットする。*/
     413        /* tcp_get_buf の割当て長をリセットする。*/
    432414        cep->get_buf_len = 0;
    433415
    434         /* 通信端点のロックを解除する。*/
     416        /* 通信端点のロックを解除する。*/
    435417        syscall(sig_sem(cep->semid_lock));
    436418
    437         /* 送信ウィンドバッファがフルのときは強制的に送信する。*/
     419        /* 送信ウィンドバッファがフルのときは強制的に送信する。*/
    438420        if (cep->swbuf_count >= cep->sbufsz)
    439421                cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR;
     
    441423
    442424/*
    443  *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする。
     425 *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする。
    444426 */
    445427
     
    455437
    456438/*
    457  *  TCP 通信端点の受信ウィンドバッファの省コピー機能が無効
    458  */
    459 
    460 /*
    461  *  tcp_drop_rwbuf -- 受信ウィンドバッファから指定されたオクテット分削除する。
     439 *  TCP 通信端点の受信ウィンドバッファの省コピー機能が無効
     440 */
     441
     442/*
     443 *  tcp_drop_rwbuf -- 受信ウィンドバッファから指定されたオクテット分削除する。
    462444 */
    463445
     
    468450        cep->rbuf_rptr  += len;
    469451
    470         /* 読み出しポインタがラウンドするときの処理 */
     452        /* 読み出しポインタがラウンドするときの処理 */
    471453        if (cep->rbuf_rptr >= (uint8_t*)cep->rbuf + cep->rbufsz)
    472454                cep->rbuf_rptr  = (uint8_t*)cep->rbuf;
     
    474456
    475457/*
    476  *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
     458 *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
    477459 */
    478460
     
    482464        uint_t  offset;
    483465
    484         /* 通信端点をロックする。*/
     466        /* 通信端点をロックする。*/
    485467        syscall(wai_sem(cep->semid_lock));
    486468
    487         /* len と受信ウィンドバッファのデータ数の小さい方を取り出すデータ数にする。*/
     469        /* len と受信ウィンドバッファのデータ数の小さい方を取り出すデータ数にする。*/
    488470        if (len > cep->rwbuf_count)
    489471                len = cep->rwbuf_count;
    490472
    491         /* 読み出しポインタがラウンドするときの処理 */
     473        /* 読み出しポインタがラウンドするときの処理 */
    492474        if (len > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) {
    493475                offset = (uint_t)(cep->rbufsz - (cep->rbuf_rptr -(uint8_t*)cep->rbuf));
     
    503485        cep->rbuf_rptr  += len - offset;
    504486
    505         /* 通信端点のロックを解除する。*/
     487        /* 通信端点のロックを解除する。*/
    506488        syscall(sig_sem(cep->semid_lock));
    507489
     
    510492
    511493/*
    512  *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
     494 *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
    513495 */
    514496
     
    518500        uint_t  len;
    519501
    520         /* 通信端点をロックする。*/
     502        /* 通信端点をロックする。*/
    521503        syscall(wai_sem(cep->semid_lock));
    522504
    523         /* 受信ウィンドバッファのデータ長を計算する。*/
     505        /* 受信ウィンドバッファのデータ長を計算する。*/
    524506        if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf))
    525                 /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
     507                /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
    526508                len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf));
    527509        else
    528510                len = cep->rwbuf_count;
    529511
    530         /* 受信ウィンドバッファのデータのアドレスのå
    531 ˆé ­ã‚’設定する。*/
     512        /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/
    532513        *p_buf = cep->rbuf_rptr;
    533514
    534         /* 通信端点のロックを解除する。*/
     515        /* 通信端点のロックを解除する。*/
    535516        syscall(sig_sem(cep->semid_lock));
    536517
    537         /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
     518        /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
    538519        cep->rcv_buf_len = len;
    539520        return len;
     
    541522
    542523/*
    543  *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
     524 *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
    544525 *
    545  *    注意:
    546  *      å
    547 ¥åŠ› input は、T_TCP_Q_HDR によりリンクされ、
    548  *      並べ替えが終了していなければならない。また、
    549  *      追加するデータは、受信ウィンドバッファに収まること。
     526 *    注意:
     527 *      入力 input は、T_TCP_Q_HDR によりリンクされ、
     528 *      並べ替えが終了していなければならない。また、
     529 *      追加するデータは、受信ウィンドバッファに収まること。
    550530 */
    551531
     
    556536        uint_t          offset, inlen, last;
    557537
    558         /* 通信端点をロックする。*/
     538        /* 通信端点をロックする。*/
    559539        syscall(wai_sem(cep->semid_lock));
    560540
    561541        qhdr  = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff);
    562542
    563         /* 受信済みシーケンス番号を更新する。*/
     543        /* 受信済みシーケンス番号を更新する。*/
    564544        cep->rcv_nxt += qhdr->slen;
    565545
     
    567547        inlen = qhdr->slen;
    568548
    569         /* 緊急データの SDU 補正を行う。*/
     549        /* 緊急データの SDU 補正を行う。*/
    570550        if (qhdr->urp > 0 && inlen > 0) {
    571551                inlen      -= qhdr->urp;
     
    575555
    576556        /*
    577          *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    578          *  これは、アプリケーションに、相手からこれ以上データが送られて
    579          *  こないことを知らせるためである。
     557         *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     558         *  これは、アプリケーションに、相手からこれ以上データが送られて
     559         *  こないことを知らせるためである。
    580560         */
    581561        if (inlen > 0) {
    582562
    583                 /* 書き込みポインタがラウンドするときの処理 */
     563                /* 書き込みポインタがラウンドするときの処理 */
    584564                if (inlen > cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf)) {
    585565                        offset = (uint_t)(cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf));
     
    604584#ifdef TCP_CFG_NON_BLOCKING
    605585
    606         if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
     586        if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
    607587
    608588                int_t   len;
    609589
    610                 /* 受信ウィンドバッファの空きデータ長を計算する。*/
     590                /* 受信ウィンドバッファの空きデータ長を計算する。*/
    611591                if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) {
    612                         /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
     592                        /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
    613593                        len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf));
    614594                        }
     
    616596                        len = cep->rwbuf_count;
    617597
    618                 /* 通信端点のロックを解除する。*/
     598                /* 通信端点のロックを解除する。*/
    619599                syscall(sig_sem(cep->semid_lock));
    620600
    621601                /*
    622                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    623                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    624                  *  こないことを知らせるためである。
     602                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     603                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     604                 *  こないことを知らせるためである。
    625605                 */
    626606                if (len > 0 || inlen == 0) {
    627607
    628                         /* tcp_rcv_buf の割当て長を設定する。*/
     608                        /* tcp_rcv_buf の割当て長を設定する。*/
    629609                        cep->rcv_buf_len = len;
    630610
    631                         /* 受信ウィンドバッファのアドレスを返す。*/
     611                        /* 受信ウィンドバッファのアドレスを返す。*/
    632612                        *cep->rcv_p_buf = cep->rbuf_rptr;
    633613
     
    646626
    647627                                /*
    648                                  *  通信端点をロックして、
    649                                  *  受信ウィンドバッファキューのネットワークバッファを解放する。
     628                                 *  通信端点をロックして、
     629                                 *  受信ウィンドバッファキューのネットワークバッファを解放する。
    650630                                 */
    651631                                syscall(wai_sem(cep->semid_lock));
     
    655635                        }
    656636
    657                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     637                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    658638                cep->rcv_tskid = TA_NULL;
    659639                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
    660640                }
    661641
    662         else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
     642        else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
    663643                ER_UINT len;
    664644
    665                 /* 通信端点のロックを解除する。*/
     645                /* 通信端点のロックを解除する。*/
    666646                syscall(sig_sem(cep->semid_lock));
    667647
    668                 /* 受信ウィンドバッファからデータを取り出す。*/
     648                /* 受信ウィンドバッファからデータを取り出す。*/
    669649                if ((len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) {
    670                         /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
     650                        /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
    671651                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    672652                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    674654
    675655                /*
    676                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    677                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    678                  *  こないことを知らせるためである。
     656                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     657                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     658                 *  こないことを知らせるためである。
    679659                 */
    680660                if (len > 0 || inlen == 0) {
     
    691671                        }
    692672
    693                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     673                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    694674                cep->rcv_tskid = TA_NULL;
    695675                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
     
    700680#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    701681
    702                 /* 通信端点のロックを解除する。*/
     682                /* 通信端点のロックを解除する。*/
    703683                syscall(sig_sem(cep->semid_lock));
    704684
    705685                if (inlen == 0 && cep->rwbuf_count == 0) {
    706686                        /*
    707                          *  受信ウィンドバッファå†
    708 ã®ãƒ‡ãƒ¼ã‚¿æ•°ãŒ 0 で、
    709                          *  相手から FIN フラグが付いたセグメントを受信したときは、
    710                          *  通信端点をロックして、
    711                          *  受信ウィンドバッファキューのネットワークバッファを解放する。
     687                         *  受信ウィンドバッファ内のデータ数が 0 で、
     688                         *  相手から FIN フラグが付いたセグメントを受信したときは、
     689                         *  通信端点をロックして、
     690                         *  受信ウィンドバッファキューのネットワークバッファを解放する。
    712691                         */
    713692                        syscall(wai_sem(cep->semid_lock));
     
    717696
    718697                /*
    719                  *  受信ウィンドバッファにデータがå
    720 ¥ã‚‹ã‹ã€ inlen == 0 の時、å
    721 ¥åŠ›ã‚¿ã‚¹ã‚¯ã‚’起床する。
    722                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    723                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    724                  *  こないことを知らせるためである。
     698                 *  受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。
     699                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     700                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     701                 *  こないことを知らせるためである。
    725702                 */
    726703                if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0)
Note: See TracChangeset for help on using the changeset viewer.