Ignore:
Timestamp:
Aug 23, 2017, 9:27:43 AM (7 years ago)
Author:
coas-nagasima
Message:

文字コードを設定

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/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
    r270 r321  
    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$
     
    135123
    136124/*
    137  *  TCP 通信端点の送信ウィンドバッファの省コピー機能が無効
    138  */
    139 
    140 /*
    141  *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す。
     125 *  TCP 通信端点の送信ウィンドバッファの省コピー機能が無効
     126 */
     127
     128/*
     129 *  tcp_read_swbuf -- 送信ウィンドバッファからデータを読み出す。
    142130 */
    143131
     
    147135        uint8_t *wptr, *rptr;
    148136
    149         /* SDU の大きさをチェックする。*/
     137        /* SDU の大きさをチェックする。*/
    150138        if (GET_IP_SDU_SIZE(GET_IP_HDR(output)) < GET_TCP_HDR_SIZE2(output, IF_IP_TCP_HDR_OFFSET) + len) {
    151139                syslog(LOG_INFO, "[TCP] shrink SUD len: %d -> %d",
     
    156144        wptr = GET_TCP_SDU(output, IF_IP_TCP_HDR_OFFSET);
    157145
    158         /* 通信端点をロックする。*/
     146        /* 通信端点をロックする。*/
    159147        syscall(wai_sem(cep->semid_lock));
    160148
     
    162150        if (rptr - (uint8_t*)cep->sbuf > cep->sbufsz) {
    163151
    164                 /* 転送開始が送信ウィンドバッファの終わりをè¶
    165 ãˆã‚‹ã¨ãã®å‡¦ç†ã€€*/
     152                /* 転送開始が送信ウィンドバッファの終わりを超えるときの処理 */
    166153                rptr = (uint8_t*)cep->sbuf_rptr - (cep->sbufsz - doff);
    167154                }
     
    169156                uint_t sub;
    170157
    171                 /* 転送範囲がラウンドするときの処理 */
     158                /* 転送範囲がラウンドするときの処理 */
    172159                sub = (uint_t)(cep->sbufsz - (rptr - (uint8_t*)cep->sbuf));
    173160                memcpy((void*)wptr, rptr, (size_t)sub);
     
    181168        NET_COUNT_TCP(net_count_tcp[NC_TCP_SEND_DATA_OCTETS], len);
    182169
    183         /* 通信端点のロックを解除する。*/
     170        /* 通信端点のロックを解除する。*/
    184171        syscall(sig_sem(cep->semid_lock));
    185172        }
    186173
    187174/*
    188  *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する。
     175 *  tcp_drop_swbuf -- 送信ウィンドバッファから指定されたオクテット分削除する。
    189176 */
    190177
     
    194181        uint_t  last;
    195182
    196         /* 通信端点をロックする。*/
     183        /* 通信端点をロックする。*/
    197184        syscall(wai_sem(cep->semid_lock));
    198185
     
    200187
    201188        if (cep->sbuf_rptr + len > (uint8_t*)cep->sbuf + cep->sbufsz)
    202                 /* ラウンドするときの計算 */
     189                /* ラウンドするときの計算 */
    203190                cep->sbuf_rptr -= cep->sbufsz - len;
    204191        else
     
    206193        cep->swbuf_count -= (uint16_t)len;
    207194
    208         /* 通信端点のロックを解除する。*/
     195        /* 通信端点のロックを解除する。*/
    209196        syscall(sig_sem(cep->semid_lock));
    210197
    211198#ifdef TCP_CFG_NON_BLOCKING
    212199
    213         if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) {     /* ノンブロッキングコール */
    214 
    215                 /* 通信端点をロックする。*/
     200        if (cep->snd_nblk_tfn == TFN_TCP_GET_BUF) {     /* ノンブロッキングコール */
     201
     202                /* 通信端点をロックする。*/
    216203                syscall(wai_sem(cep->semid_lock));
    217204
    218                 /* 送信データ長を計算する。*/
     205                /* 送信データ長を計算する。*/
    219206                if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf))
    220                         /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
     207                        /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
    221208                        len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf));
    222209                else
    223210                        len = cep->sbufsz - cep->swbuf_count;
    224211
    225                 /* 通信端点のロックを解除する。*/
     212                /* 通信端点のロックを解除する。*/
    226213                syscall(sig_sem(cep->semid_lock));
    227214
    228215                if (len > 0) {
    229216
    230                         /* tcp_get_buf の割当て長を設定する。*/
     217                        /* tcp_get_buf の割当て長を設定する。*/
    231218                        cep->get_buf_len = len;
    232219
    233                         /* 送信ウィンドバッファのアドレスを返す。*/
     220                        /* 送信ウィンドバッファのアドレスを返す。*/
    234221                        *cep->snd_p_buf = cep->sbuf_wptr;
    235222
     
    248235                                syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
    249236
    250                         /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     237                        /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    251238                        cep->snd_tskid = TA_NULL;
    252239                        cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    257244
    258245        else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT ||
    259                  cep->snd_nblk_tfn == TFN_TCP_SND_OOB) {        /* ノンブロッキングコール */
     246                 cep->snd_nblk_tfn == TFN_TCP_SND_OOB) {        /* ノンブロッキングコール */
    260247
    261248#else   /* of #ifdef TCP_CFG_EXTENTIONS */
    262249
    263         else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) {        /* ノンブロッキングコール */
     250        else if (cep->snd_nblk_tfn == TFN_TCP_SND_DAT) {        /* ノンブロッキングコール */
    264251
    265252#endif  /* of #ifdef TCP_CFG_EXTENTIONS */
     
    267254                ER_UINT error;
    268255
    269                 /* 送信ウィンドバッファにデータを書き込む。*/
     256                /* 送信ウィンドバッファにデータを書き込む。*/
    270257                error = TCP_WRITE_SWBUF(cep, cep->snd_data, (uint_t)cep->snd_len);
    271258
    272259#ifdef TCP_CFG_EXTENTIONS
    273260
    274                 /* 送信緊急ポインタを設定する。*/
     261                /* 送信緊急ポインタを設定する。*/
    275262                if (cep->snd_nblk_tfn == TFN_TCP_SND_OOB)
    276263                        cep->snd_up = cep->snd_una + error;
     
    293280                        syslog(LOG_WARNING, "[TCP] no call back, CEP: %d.", GET_TCP_CEPID(cep));
    294281
    295                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     282                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    296283                cep->snd_tskid = TA_NULL;
    297284                cep->snd_tfn   = cep->snd_nblk_tfn = TFN_TCP_UNDEF;
     
    301288#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    302289
    303                 /* 送信ウィンドバッファに空きが出来たら出力タスクを起床する。*/
     290                /* 送信ウィンドバッファに空きが出来たら出力タスクを起床する。*/
    304291                if (last == cep->sbufsz && cep->swbuf_count < cep->sbufsz)
    305292                        syscall(set_flg(cep->snd_flgid, TCP_CEP_EVT_SWBUF_READY));
     
    312299
    313300        if (cep->swbuf_count > 0) {
    314                 /* 送信ウィンドバッファにデータがあれば出力をポストする。*/
     301                /* 送信ウィンドバッファにデータがあれば出力をポストする。*/
    315302                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    316303                sig_sem(SEM_TCP_POST_OUTPUT);
     
    319306
    320307/*
    321  *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む。
     308 *  tcp_write_swbuf -- 送信ウィンドバッファにデータを書き込む。
    322309 */
    323310
     
    327314        uint_t  offset;
    328315
    329         /* 通信端点をロックする。*/
     316        /* 通信端点をロックする。*/
    330317        syscall(wai_sem(cep->semid_lock));
    331318
    332         /* len と送信ウィンドバッファの空きの小さい方を移すデータ数にする。*/
     319        /* len と送信ウィンドバッファの空きの小さい方を移すデータ数にする。*/
    333320        if (len > (cep->sbufsz - cep->swbuf_count))
    334321                len = cep->sbufsz - cep->swbuf_count;
    335322
    336         /* 書き込みポインタがラウンドするときの処理 */
     323        /* 書き込みポインタがラウンドするときの処理 */
    337324        if (len > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf)) {
    338325                offset = (uint_t)(cep->sbufsz - (cep->sbuf_wptr -(uint8_t*)cep->sbuf));
     
    348335        cep->swbuf_count += len - offset;
    349336
    350         /* 通信端点のロックを解除する。*/
     337        /* 通信端点のロックを解除する。*/
    351338        syscall(sig_sem(cep->semid_lock));
    352339
     
    355342
    356343/*
    357  *  tcp_wait_swbuf -- 送信ウィンドバッファが空くのをå¾
    358 ã¤ã€‚
     344 *  tcp_wait_swbuf -- 送信ウィンドバッファが空くのを待つ。
    359345 */
    360346
     
    367353        while (cep->swbuf_count >= cep->sbufsz) {
    368354                /*
    369                  *  送信ウィンドバッファの空きがなければ、出力をポストして、
    370                  *  送信ウィンドバッファが空くまでå¾
    371 ã¤ã€‚
     355                 *  送信ウィンドバッファの空きがなければ、出力をポストして、
     356                 *  送信ウィンドバッファが空くまで待つ。
    372357                 */
    373358                cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
     
    380365
    381366                /*
    382                  *  送信できるか、CEP の FSM 状æ
    383 ‹ã‚’見る。
    384                  *  送信ウィンドバッファが空くまでå¾
    385 ã¤é–“に、送信不能になった場合は、
    386                  *  コネクションが切断されたことを意味している。
     367                 *  送信できるか、CEP の FSM 状態を見る。
     368                 *  送信ウィンドバッファが空くまで待つ間に、送信不能になった場合は、
     369                 *  コネクションが切断されたことを意味している。
    387370                 */
    388371                if (!TCP_FSM_CAN_SEND_MORE(cep->fsm_state)) {
     
    394377        }
    395378/*
    396  *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する。
     379 *  tcp_get_swbuf_addr -- 送信ウィンドバッファの空きアドレスを獲得する。
    397380 */
    398381
     
    402385        uint_t  len;
    403386
    404         /* 通信端点をロックする。*/
     387        /* 通信端点をロックする。*/
    405388        syscall(wai_sem(cep->semid_lock));
    406389
    407         /* 送信ウィンドバッファの空きアドレスのå
    408 ˆé ­ã‚’設定する。*/
     390        /* 送信ウィンドバッファの空きアドレスの先頭を設定する。*/
    409391        *p_buf = cep->sbuf_wptr;
    410392
    411         /* 送信ウィンドバッファの空きサイズを計算する。*/
     393        /* 送信ウィンドバッファの空きサイズを計算する。*/
    412394        if (cep->sbufsz - cep->swbuf_count > cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf))
    413                 /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
     395                /* 書込みポインタがラウンドするときは、書込みポインタから送信ウィンドバッファの終わりまで */
    414396                len = (uint_t)(cep->sbufsz - (cep->sbuf_wptr - (uint8_t*)cep->sbuf));
    415397        else
    416398                len = cep->sbufsz - cep->swbuf_count;
    417399
    418         /* 通信端点のロックを解除する。*/
     400        /* 通信端点のロックを解除する。*/
    419401        syscall(sig_sem(cep->semid_lock));
    420402
    421         /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
     403        /* 送信ウィンドバッファの空きデータ長を設定し、その値を返す。*/
    422404        cep->get_buf_len = len;
    423405        return (ER_UINT)len;
     
    425407
    426408/*
    427  *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする。
     409 *  tcp_send_swbuf -- 送信ウィンドバッファのデータを送信可能にする。
    428410 */
    429411
     
    431413tcp_send_swbuf_ncs (T_TCP_CEP *cep, uint_t len)
    432414{
    433         /* 通信端点をロックする。*/
     415        /* 通信端点をロックする。*/
    434416        syscall(wai_sem(cep->semid_lock));
    435417
     
    437419        cep->swbuf_count += len;
    438420
    439         /* 書込みポインタがラウンドするときの処理 */
     421        /* 書込みポインタがラウンドするときの処理 */
    440422        if (cep->sbuf_wptr >= (uint8_t*)cep->sbuf + cep->sbufsz)
    441423                cep->sbuf_wptr  = (uint8_t*)cep->sbuf;
    442424
    443         /* tcp_get_buf の割当て長をリセットする。*/
     425        /* tcp_get_buf の割当て長をリセットする。*/
    444426        cep->get_buf_len = 0;
    445427
    446         /* 通信端点のロックを解除する。*/
     428        /* 通信端点のロックを解除する。*/
    447429        syscall(sig_sem(cep->semid_lock));
    448430
    449         /* 送信ウィンドバッファがフルのときは強制的に送信する。*/
     431        /* 送信ウィンドバッファがフルのときは強制的に送信する。*/
    450432        if (cep->swbuf_count >= cep->sbufsz)
    451433                cep->flags |= TCP_CEP_FLG_FORCE | TCP_CEP_FLG_FORCE_CLEAR;
     
    453435
    454436/*
    455  *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする。
     437 *  tcp_is_swbuf_full -- 送信ウィンドバッファが満杯かチェックする。
    456438 */
    457439
     
    467449
    468450/*
    469  *  TCP 通信端点の受信ウィンドバッファの省コピー機能が無効
    470  */
    471 
    472 /*
    473  *  tcp_drop_rwbuf -- 受信ウィンドバッファから指定されたオクテット分削除する。
     451 *  TCP 通信端点の受信ウィンドバッファの省コピー機能が無効
     452 */
     453
     454/*
     455 *  tcp_drop_rwbuf -- 受信ウィンドバッファから指定されたオクテット分削除する。
    474456 */
    475457
     
    480462        cep->rbuf_rptr  += len;
    481463
    482         /* 読み出しポインタがラウンドするときの処理 */
     464        /* 読み出しポインタがラウンドするときの処理 */
    483465        if (cep->rbuf_rptr >= (uint8_t*)cep->rbuf + cep->rbufsz)
    484466                cep->rbuf_rptr  = (uint8_t*)cep->rbuf;
     
    486468
    487469/*
    488  *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
     470 *  tcp_read_rwbuf -- 受信ウィンドバッファから指定されたオクテット分読み出す。
    489471 */
    490472
     
    494476        uint_t  offset;
    495477
    496         /* 通信端点をロックする。*/
     478        /* 通信端点をロックする。*/
    497479        syscall(wai_sem(cep->semid_lock));
    498480
    499         /* len と受信ウィンドバッファのデータ数の小さい方を取り出すデータ数にする。*/
     481        /* len と受信ウィンドバッファのデータ数の小さい方を取り出すデータ数にする。*/
    500482        if (len > cep->rwbuf_count)
    501483                len = cep->rwbuf_count;
    502484
    503         /* 読み出しポインタがラウンドするときの処理 */
     485        /* 読み出しポインタがラウンドするときの処理 */
    504486        if (len > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) {
    505487                offset = (uint_t)(cep->rbufsz - (cep->rbuf_rptr -(uint8_t*)cep->rbuf));
     
    515497        cep->rbuf_rptr  += len - offset;
    516498
    517         /* 通信端点のロックを解除する。*/
     499        /* 通信端点のロックを解除する。*/
    518500        syscall(sig_sem(cep->semid_lock));
    519501
     
    522504
    523505/*
    524  *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
     506 *  tcp_get_rwbuf_addr -- 受信ウィンドバッファの空きアドレスを獲得する。
    525507 */
    526508
     
    530512        uint_t  len;
    531513
    532         /* 通信端点をロックする。*/
     514        /* 通信端点をロックする。*/
    533515        syscall(wai_sem(cep->semid_lock));
    534516
    535         /* 受信ウィンドバッファのデータ長を計算する。*/
     517        /* 受信ウィンドバッファのデータ長を計算する。*/
    536518        if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf))
    537                 /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
     519                /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
    538520                len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf));
    539521        else
    540522                len = cep->rwbuf_count;
    541523
    542         /* 受信ウィンドバッファのデータのアドレスのå
    543 ˆé ­ã‚’設定する。*/
     524        /* 受信ウィンドバッファのデータのアドレスの先頭を設定する。*/
    544525        *p_buf = cep->rbuf_rptr;
    545526
    546         /* 通信端点のロックを解除する。*/
     527        /* 通信端点のロックを解除する。*/
    547528        syscall(sig_sem(cep->semid_lock));
    548529
    549         /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
     530        /* 受信ウィンドバッファのデータ長を設定し、その値を返す。*/
    550531        cep->rcv_buf_len = len;
    551532        return len;
     
    553534
    554535/*
    555  *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
     536 *  tcp_write_rwbuf -- 受信ウィンドバッファにデータを書き込む。
    556537 *
    557  *    注意:
    558  *      å
    559 ¥åŠ› input は、T_TCP_Q_HDR によりリンクされ、
    560  *      並べ替えが終了していなければならない。また、
    561  *      追加するデータは、受信ウィンドバッファに収まること。
     538 *    注意:
     539 *      入力 input は、T_TCP_Q_HDR によりリンクされ、
     540 *      並べ替えが終了していなければならない。また、
     541 *      追加するデータは、受信ウィンドバッファに収まること。
    562542 */
    563543
     
    568548        uint_t          offset, inlen, last;
    569549
    570         /* 通信端点をロックする。*/
     550        /* 通信端点をロックする。*/
    571551        syscall(wai_sem(cep->semid_lock));
    572552
    573553        qhdr  = (T_TCP_Q_HDR*)GET_TCP_HDR(input, thoff);
    574554
    575         /* 受信済みシーケンス番号を更新する。*/
     555        /* 受信済みシーケンス番号を更新する。*/
    576556        cep->rcv_nxt += qhdr->slen;
    577557
     
    579559        inlen = qhdr->slen;
    580560
    581         /* 緊急データの SDU 補正を行う。*/
     561        /* 緊急データの SDU 補正を行う。*/
    582562        if (qhdr->urp > 0 && inlen > 0) {
    583563                inlen      -= qhdr->urp;
     
    587567
    588568        /*
    589          *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    590          *  これは、アプリケーションに、相手からこれ以上データが送られて
    591          *  こないことを知らせるためである。
     569         *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     570         *  これは、アプリケーションに、相手からこれ以上データが送られて
     571         *  こないことを知らせるためである。
    592572         */
    593573        if (inlen > 0) {
    594574
    595                 /* 書き込みポインタがラウンドするときの処理 */
     575                /* 書き込みポインタがラウンドするときの処理 */
    596576                if (inlen > cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf)) {
    597577                        offset = (uint_t)(cep->rbufsz - (cep->rbuf_wptr - (uint8_t*)cep->rbuf));
     
    616596#ifdef TCP_CFG_NON_BLOCKING
    617597
    618         if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
     598        if (cep->rcv_nblk_tfn == TFN_TCP_RCV_BUF) {     /* ノンブロッキングコール */
    619599
    620600                int_t   len;
    621601
    622                 /* 受信ウィンドバッファの空きデータ長を計算する。*/
     602                /* 受信ウィンドバッファの空きデータ長を計算する。*/
    623603                if (cep->rwbuf_count > cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf)) {
    624                         /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
     604                        /* ポインタがラウンドするときは受信ウィンドバッファの終わりまで */
    625605                        len = (uint_t)(cep->rbufsz - (cep->rbuf_rptr - (uint8_t*)cep->rbuf));
    626606                        }
     
    628608                        len = cep->rwbuf_count;
    629609
    630                 /* 通信端点のロックを解除する。*/
     610                /* 通信端点のロックを解除する。*/
    631611                syscall(sig_sem(cep->semid_lock));
    632612
    633613                /*
    634                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    635                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    636                  *  こないことを知らせるためである。
     614                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     615                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     616                 *  こないことを知らせるためである。
    637617                 */
    638618                if (len > 0 || inlen == 0) {
    639619
    640                         /* tcp_rcv_buf の割当て長を設定する。*/
     620                        /* tcp_rcv_buf の割当て長を設定する。*/
    641621                        cep->rcv_buf_len = len;
    642622
    643                         /* 受信ウィンドバッファのアドレスを返す。*/
     623                        /* 受信ウィンドバッファのアドレスを返す。*/
    644624                        *cep->rcv_p_buf = cep->rbuf_rptr;
    645625
     
    663643
    664644                                /*
    665                                  *  通信端点をロックして、
    666                                  *  受信ウィンドバッファキューのネットワークバッファを解放する。
     645                                 *  通信端点をロックして、
     646                                 *  受信ウィンドバッファキューのネットワークバッファを解放する。
    667647                                 */
    668648                                syscall(wai_sem(cep->semid_lock));
     
    672652                        }
    673653
    674                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     654                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    675655                cep->rcv_tskid = TA_NULL;
    676656                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
    677657                }
    678658
    679         else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
     659        else if (cep->rcv_nblk_tfn == TFN_TCP_RCV_DAT) {        /* ノンブロッキングコール */
    680660                ER_UINT len;
    681661
    682                 /* 通信端点のロックを解除する。*/
     662                /* 通信端点のロックを解除する。*/
    683663                syscall(sig_sem(cep->semid_lock));
    684664
    685                 /* 受信ウィンドバッファからデータを取り出す。*/
     665                /* 受信ウィンドバッファからデータを取り出す。*/
    686666                if ((len = TCP_READ_RWBUF(cep, cep->rcv_data, (uint_t)cep->rcv_len)) > 0) {
    687                         /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
     667                        /* 相手にウィンドウサイズが変わったことを知らせるため出力をポストする。*/
    688668                        cep->flags |= TCP_CEP_FLG_POST_OUTPUT;
    689669                        sig_sem(SEM_TCP_POST_OUTPUT);
     
    691671
    692672                /*
    693                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    694                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    695                  *  こないことを知らせるためである。
     673                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     674                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     675                 *  こないことを知らせるためである。
    696676                 */
    697677                if (len > 0 || inlen == 0) {
     
    713693                        }
    714694
    715                 /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
     695                /* 記憶されているタスク ID と API 機能コードをクリアーする。*/
    716696                cep->rcv_tskid = TA_NULL;
    717697                cep->rcv_tfn   = cep->rcv_nblk_tfn = TFN_TCP_UNDEF;
     
    722702#endif  /* of #ifdef TCP_CFG_NON_BLOCKING */
    723703
    724                 /* 通信端点のロックを解除する。*/
     704                /* 通信端点のロックを解除する。*/
    725705                syscall(sig_sem(cep->semid_lock));
    726706
    727707                if (inlen == 0 && cep->rwbuf_count == 0) {
    728708                        /*
    729                          *  受信ウィンドバッファå†
    730 ã®ãƒ‡ãƒ¼ã‚¿æ•°ãŒ 0 で、
    731                          *  相手から FIN フラグが付いたセグメントを受信したときは、
    732                          *  通信端点をロックして、
    733                          *  受信ウィンドバッファキューのネットワークバッファを解放する。
     709                         *  受信ウィンドバッファ内のデータ数が 0 で、
     710                         *  相手から FIN フラグが付いたセグメントを受信したときは、
     711                         *  通信端点をロックして、
     712                         *  受信ウィンドバッファキューのネットワークバッファを解放する。
    734713                         */
    735714                        syscall(wai_sem(cep->semid_lock));
     
    739718
    740719                /*
    741                  *  受信ウィンドバッファにデータがå
    742 ¥ã‚‹ã‹ã€ inlen == 0 の時、å
    743 ¥åŠ›ã‚¿ã‚¹ã‚¯ã‚’起床する。
    744                  *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
    745                  *  これは、アプリケーションに、相手からこれ以上データが送られて
    746                  *  こないことを知らせるためである。
     720                 *  受信ウィンドバッファにデータが入るか、 inlen == 0 の時、入力タスクを起床する。
     721                 *  FIN フラグが付いたセグメントは inlen == 0 になることもある。
     722                 *  これは、アプリケーションに、相手からこれ以上データが送られて
     723                 *  こないことを知らせるためである。
    747724                 */
    748725                if ((last == 0 && cep->rwbuf_count > 0) || inlen == 0)
Note: See TracChangeset for help on using the changeset viewer.