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/udp_usrreq.c

    • Property svn:keywords deleted
    • Property svn:mime-type changed from text/x-csrc to text/x-csrc;charset=UTF-8
    r279 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$
     
    8169
    8270/*
    83  *  ノンブロッキングコールを組込まない場合にリンクされる関数の定義
     71 *  ノンブロッキングコールを組込まない場合にリンクされる関数の定義
    8472 */
    8573
     
    131119
    132120/*
    133  *  IPv4 と IPv6 の切り替えマクロ
     121 *  IPv4 と IPv6 の切り替えマクロ
    134122 */
    135123
     
    151139
    152140/*
    153  *  TINET をライブラリ化しない場合は、å
    154 ¨ã¦ã®æ©Ÿèƒ½ã‚’
    155  *  オブジェクトファイルに出力するため、マクロを有効にする。
     141 *  TINET をライブラリ化しない場合は、全ての機能を
     142 *  オブジェクトファイルに出力するため、マクロを有効にする。
    156143 */
    157144
     
    174161
    175162/*
    176  *  udp_send_data -- パケット送信の主要部
     163 *  udp_send_data -- パケット送信の主要部
    177164 */
    178165
     
    192179        NET_COUNT_UDP(net_count_udp.out_packets, 1);
    193180
    194         /* IP データグラム割り当ての時間を tmout から減ずる。*/
     181        /* IP データグラム割り当ての時間を tmout から減ずる。*/
    195182        if (!(tmout == TMO_POL || tmout == TMO_FEVR))
    196183                syscall(get_tim(&before));
    197184
    198         /* IP データグラムを割り当てる。*/
     185        /* IP データグラムを割り当てる。*/
    199186        if ((error = IN_GET_DATAGRAM(&output, (uint_t)(UDP_HDR_SIZE + len), 0,
    200187                                     &p_dstaddr->ipaddr,
     
    204191                goto err_ret;
    205192
    206         /* IP データグラム割り当ての時間を tmout から減ずる。*/
     193        /* IP データグラム割り当ての時間を tmout から減ずる。*/
    207194        if (!(tmout == TMO_POL || tmout == TMO_FEVR)) {
    208195                syscall(get_tim(&after));
     
    215202                }
    216203
    217         /* UDP ヘッダにæƒ
    218 å ±ã‚’設定する。*/
     204        /* UDP ヘッダに情報を設定する。*/
    219205        udph            = GET_UDP_HDR(output, IF_IP_UDP_HDR_OFFSET);
    220206        udph->sport     = htons(cep->myaddr.portno);
     
    223209        udph->sum       = 0;
    224210
    225         /* データをコピーする。*/
     211        /* データをコピーする。*/
    226212        memcpy((void*)GET_UDP_SDU(output, IF_IP_UDP_HDR_OFFSET), data, (size_t)len);
    227213
     
    230216        sum = IN_CKSUM(output, IPPROTO_UDP, IF_IP_UDP_HDR_OFFSET, (uint_t)(UDP_HDR_SIZE + len));
    231217
    232         /* 計算したチェックサムの値が 0 なら 0xffff をå
    233 ¥ã‚Œã‚‹ã€‚*/
     218        /* 計算したチェックサムの値が 0 なら 0xffff を入れる。*/
    234219        if (sum == 0)
    235220                sum = 0xffff;
     
    238223#endif  /* of #ifdef UDP_CFG_OUT_CHECKSUM */
    239224
    240         /* ネットワークバッファ長を調整する。*/
     225        /* ネットワークバッファ長を調整する。*/
    241226        output->len = (uint16_t)(IF_IP_UDP_HDR_SIZE + len);
    242227
    243         /* ネットワーク層 (IP) の出力関数を呼び出す。*/
     228        /* ネットワーク層 (IP) の出力関数を呼び出す。*/
    244229        if ((error = IP_OUTPUT(output, tmout)) == E_OK) {
    245230                NET_COUNT_MIB(udp_stats.udpOutDatagrams, 1);
     
    257242
    258243/*
    259  *  udp_cre_cep -- UDP 通信端点の生成【拡張機能】
     244 *  udp_cre_cep -- UDP 通信端点の生成【拡張機能】
    260245 */
    261246
     
    270255        ER              error;
    271256
    272         /* UDP 通信端点 ID をチェックする。*/
     257        /* UDP 通信端点 ID をチェックする。*/
    273258        if (!VALID_UDP_CEPID(cepid))
    274259                return E_ID;
    275260
    276         /* pk_ccep が NULL ならエラー */
     261        /* pk_ccep が NULL ならエラー */
    277262        if (pk_ccep == NULL)
    278263                return E_PAR;
    279264
    280         /* UDP 通信端点を得る。*/
     265        /* UDP 通信端点を得る。*/
    281266        cep = GET_UDP_CEP(cepid);
    282267
    283         /* UDP 通信端点をチェックする。*/
     268        /* UDP 通信端点をチェックする。*/
    284269        if (VALID_UDP_CEP(cep))
    285270                return E_OBJ;
    286271
    287         /* UDP 通信端点が、動的生成用でなければエラー */
     272        /* UDP 通信端点が、動的生成用でなければエラー */
    288273        if (!DYNAMIC_UDP_CEP(cep))
    289274                return E_ID;
    290275
    291         /* 通信端点をロックする。*/
     276        /* 通信端点をロックする。*/
    292277        syscall(wai_sem(cep->semid_lock));
    293278
    294279        /*
    295          * UDP 通信端点をチェックする。生成済みであればエラー
     280         * UDP 通信端点をチェックする。生成済みであればエラー
    296281         */
    297282        if (VALID_UDP_CEP(cep))
     
    300285
    301286                /*
    302                  *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
     287                 *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
    303288                 */
    304289                if (pk_ccep->myaddr.portno == UDP_PORTANY)
     
    309294                if (error == E_OK) {
    310295
    311                         /* UDP 通信端点生成æƒ
    312 å ±ã‚’コピーする。*/
    313                         cep->cepatr        = pk_ccep->cepatr;                   /* 通信端点属性           */
    314                         cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr;            /* 自分のアドレス        */
    315                         cep->callback      = (void*)pk_ccep->callback;          /* コールバック           */
    316 
    317                         /* UDP 通信端点を生成済みにする。*/
     296                        /* UDP 通信端点生成情報をコピーする。*/
     297                        cep->cepatr        = pk_ccep->cepatr;                   /* 通信端点属性               */
     298                        cep->myaddr.ipaddr = pk_ccep->myaddr.ipaddr;            /* 自分のアドレス      */
     299                        cep->callback      = (void*)pk_ccep->callback;          /* コールバック               */
     300
     301                        /* UDP 通信端点を生成済みにする。*/
    318302                        cep->flags |= UDP_CEP_FLG_VALID;
    319303                        }
    320304                }
    321305
    322         /* 通信端点のロックを解除する。*/
     306        /* 通信端点のロックを解除する。*/
    323307        syscall(sig_sem(cep->semid_lock));
    324308
     
    331315
    332316/*
    333  *  udp_del_cep -- UDP 通信端点の削除【拡張機能】
     317 *  udp_del_cep -- UDP 通信端点の削除【拡張機能】
    334318 */
    335319
     
    344328        ER              error;
    345329
    346         /* UDP 通信端点 ID をチェックする。*/
     330        /* UDP 通信端点 ID をチェックする。*/
    347331        if (!VALID_UDP_CEPID(cepid))
    348332                return E_ID;
    349333
    350         /* UDP 通信端点を得る。*/
     334        /* UDP 通信端点を得る。*/
    351335        cep = GET_UDP_CEP(cepid);
    352336
    353         /* UDP 通信端点をチェックする。*/
     337        /* UDP 通信端点をチェックする。*/
    354338        if (!VALID_UDP_CEP(cep))
    355339                return E_NOEXS;
    356340
    357         /* UDP 通信端点が、動的生成用でなければエラー */
     341        /* UDP 通信端点が、動的生成用でなければエラー */
    358342        if (!DYNAMIC_UDP_CEP(cep))
    359343                return E_ID;
    360344
    361         /* 通信端点をロックする。*/
     345        /* 通信端点をロックする。*/
    362346        syscall(wai_sem(cep->semid_lock));
    363347
    364348        /*
    365          * UDP 通信端点をチェックする。未生成の場合はエラー
    366          * ・未生成。
     349         * UDP 通信端点をチェックする。未生成の場合はエラー
     350         * ・未生成。
    367351         */
    368352        if (!VALID_UDP_CEP(cep))
     
    372356                udp_can_rcv(cep, E_DLT);
    373357
    374                 /* UDP 通信端点を未生成にする。*/
     358                /* UDP 通信端点を未生成にする。*/
    375359                cep->flags &= ~UDP_CEP_FLG_VALID;
    376360                error = E_OK;
    377361                }
    378362
    379         /* 通信端点のロックを解除する。*/
     363        /* 通信端点のロックを解除する。*/
    380364        syscall(sig_sem(cep->semid_lock));
    381365
     
    390374
    391375/*
    392  *  udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】
     376 *  udp_can_cep -- ペンディングしている処理のキャンセル【標準機能】
    393377 */
    394378
     
    399383        ER              error = E_OK, snd_err, rcv_err;
    400384
    401         /* API 機能コードをチェックする。*/
     385        /* API 機能コードをチェックする。*/
    402386        if (!VALID_TFN_UDP_CAN(fncd))
    403387                return E_PAR;
    404388
    405         /* UDP 通信端点 ID をチェックする。*/
     389        /* UDP 通信端点 ID をチェックする。*/
    406390        if (!VALID_UDP_CEPID(cepid))
    407391                return E_ID;
    408392
    409         /* UDP 通信端点を得る。*/
     393        /* UDP 通信端点を得る。*/
    410394        cep = GET_UDP_CEP(cepid);
    411395
    412         /* UDP 通信端点をチェックする。*/
     396        /* UDP 通信端点をチェックする。*/
    413397        if (!VALID_UDP_CEP(cep))
    414398                return E_NOEXS;
    415399
    416         /* 通信端点をロックする。*/
     400        /* 通信端点をロックする。*/
    417401        syscall(wai_sem(cep->semid_lock));
    418402
    419         if (fncd == TFN_UDP_ALL) {      /* TFN_UDP_ALL の処理 */
     403        if (fncd == TFN_UDP_ALL) {      /* TFN_UDP_ALL の処理 */
    420404
    421405                snd_err = udp_can_snd(cep, E_RLWAI);
     
    423407
    424408                /*
    425                  *  snd_err と rcv_err のどちらも EV_NOPND
    426                  *  なら、ペンディングしていないのでエラー
     409                 *  snd_err と rcv_err のどちらも EV_NOPND
     410                 *  なら、ペンディングしていないのでエラー
    427411                 */
    428412                if (snd_err == EV_NOPND && rcv_err == EV_NOPND)
     
    440424                        }
    441425                }
    442         else if (fncd == TFN_UDP_SND_DAT) {     /* 送信処理のキャンセル */
     426        else if (fncd == TFN_UDP_SND_DAT) {     /* 送信処理のキャンセル */
    443427                if ((error = udp_can_snd(cep, E_RLWAI)) == EV_NOPND)
    444428                        error = E_OBJ;
    445429                }
    446         else if (fncd == TFN_UDP_RCV_DAT) {     /* 受信処理のキャンセル */
     430        else if (fncd == TFN_UDP_RCV_DAT) {     /* 受信処理のキャンセル */
    447431                if ((error = udp_can_rcv(cep, E_RLWAI)) == EV_NOPND)
    448432                        error = E_OBJ;
     
    451435                error = E_PAR;
    452436
    453         /* 通信端点をロックを解除する。*/
     437        /* 通信端点をロックを解除する。*/
    454438        syscall(sig_sem(cep->semid_lock));
    455439
     
    460444
    461445/*
    462  *  udp_set_opt -- UDP 通信端点オプションの設定【拡張機能】
     446 *  udp_set_opt -- UDP 通信端点オプションの設定【拡張機能】
    463447 *
    464  *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
     448 *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
    465449 */
    466450
     
    474458        T_UDP_CEP       *cep;
    475459
    476         /* UDP 通信端点 ID をチェックする。*/
     460        /* UDP 通信端点 ID をチェックする。*/
    477461        if (!VALID_UDP_CEPID(cepid))
    478462                return E_ID;
    479463
    480         /* UDP 通信端点を得る。*/
     464        /* UDP 通信端点を得る。*/
    481465        cep = GET_UDP_CEP(cepid);
    482466
    483         /* UDP 通信端点をチェックする。*/
     467        /* UDP 通信端点をチェックする。*/
    484468        if (!VALID_UDP_CEP(cep))
    485469                return E_NOEXS;
     
    493477
    494478/*
    495  *  udp_get_opt -- UDP 通信端点オプションの設定【拡張機能】
     479 *  udp_get_opt -- UDP 通信端点オプションの設定【拡張機能】
    496480 *
    497  *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
     481 *  注意: 設定可能な UDP 通信端点オプションは無いため、E_PAR が返される。
    498482 */
    499483
     
    507491        T_UDP_CEP       *cep;
    508492
    509         /* UDP 通信端点 ID をチェックする。*/
     493        /* UDP 通信端点 ID をチェックする。*/
    510494        if (!VALID_UDP_CEPID(cepid))
    511495                return E_ID;
    512496
    513         /* UDP 通信端点を得る。*/
     497        /* UDP 通信端点を得る。*/
    514498        cep = GET_UDP_CEP(cepid);
    515499
    516         /* UDP 通信端点をチェックする。*/
     500        /* UDP 通信端点をチェックする。*/
    517501        if (!VALID_UDP_CEP(cep))
    518502                return E_NOEXS;
     
    534518
    535519/*
    536  *  udp_can_snd -- ペンディングしている送信のキャンセル
     520 *  udp_can_snd -- ペンディングしている送信のキャンセル
    537521 */
    538522
     
    540524udp_can_snd (T_UDP_CEP *cep, ER error)
    541525{
    542         if (cep->snd_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
    543 
    544 #ifdef UDP_CFG_EXTENTIONS
    545 
    546                 /* å¾
    547 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    548 å ±ã‚’設定する。*/
     526        if (cep->snd_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
     527
     528#ifdef UDP_CFG_EXTENTIONS
     529
     530                /* 待ち中に発生したエラー情報を設定する。*/
    549531                cep->error = error;
    550532
     
    554536                cep->snd_tskid = TA_NULL;
    555537                }
    556         else                                    /* どちらでもないならペンディングしていない */
     538        else                                    /* どちらでもないならペンディングしていない */
    557539                error = EV_NOPND;
    558540
     
    565547
    566548/*
    567  *  udp_can_rcv -- ペンディングしている受信のキャンセル
     549 *  udp_can_rcv -- ペンディングしている受信のキャンセル
    568550 */
    569551
     
    571553udp_can_rcv (T_UDP_CEP *cep, ER error)
    572554{
    573         if (cep->rcv_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
    574 
    575 #ifdef UDP_CFG_EXTENTIONS
    576 
    577                 /* å¾
    578 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    579 å ±ã‚’設定する。*/
     555        if (cep->rcv_tskid != TA_NULL) {        /* 非ノンブロッキングコールでペンディング中 */
     556
     557#ifdef UDP_CFG_EXTENTIONS
     558
     559                /* 待ち中に発生したエラー情報を設定する。*/
    580560                cep->error = error;
    581561
     
    585565                cep->rcv_tskid = TA_NULL;
    586566                }
    587         else                                    /* どちらでもないならペンディングしていない */
     567        else                                    /* どちらでもないならペンディングしていない */
    588568                error = EV_NOPND;
    589569
     
    596576
    597577/*
    598  *  udp_snd_dat -- パケットの送信【標準機能】
     578 *  udp_snd_dat -- パケットの送信【標準機能】
    599579 */
    600580
     
    605585        ER              error;
    606586
    607         /* p_dstaddr または data が NULL か、tmout が TMO_NBLK ならエラー */
     587        /* p_dstaddr または data が NULL か、tmout が TMO_NBLK ならエラー */
    608588        if (p_dstaddr == NULL || data == NULL || tmout == TMO_NBLK)
    609589                return E_PAR;
    610590
    611         /* データ長をチェックする。*/
     591        /* データ長をチェックする。*/
    612592        if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU)
    613593                return E_PAR;
    614594
    615         /* UDP 通信端点 ID をチェックする。*/
     595        /* UDP 通信端点 ID をチェックする。*/
    616596        if (!VALID_UDP_CEPID(cepid))
    617597                return E_ID;
    618598
    619         /* UDP 通信端点を得る。*/
     599        /* UDP 通信端点を得る。*/
    620600        cep = GET_UDP_CEP(cepid);
    621601
    622         /* UDP 通信端点をチェックする。*/
     602        /* UDP 通信端点をチェックする。*/
    623603        if (!VALID_UDP_CEP(cep))
    624604                return E_NOEXS;
    625605
    626606        /*
    627          *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
     607         *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
    628608         */
    629609        if (cep->myaddr.portno == UDP_PORTANY) {
     
    632612                }
    633613       
    634         /* 通信端点をロックする。*/
     614        /* 通信端点をロックする。*/
    635615        syscall(wai_sem(cep->semid_lock));
    636616
    637617        if (cep->snd_tskid != TA_NULL) {
    638618
    639                 /* 非ノンブロッキングコールでペンディング中 */
     619                /* 非ノンブロッキングコールでペンディング中 */
    640620                error = E_QOVR;
    641621
    642                 /* 通信端点をロックを解除する。*/
     622                /* 通信端点をロックを解除する。*/
    643623                syscall(sig_sem(cep->semid_lock));
    644624                }
    645625        else {
    646                 /* 現在のタスク識別子を記録する。*/
     626                /* 現在のタスク識別子を記録する。*/
    647627                get_tid(&(cep->snd_tskid));
    648628
    649629#ifdef UDP_CFG_EXTENTIONS
    650630
    651                 /* å¾
    652 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    653 å ±ã‚’リセットする。*/
     631                /* 待ち中に発生したエラー情報をリセットする。*/
    654632                cep->error = E_OK;
    655633
    656634#endif  /* of #ifdef UDP_CFG_EXTENTIONS */
    657635
    658                 /* 通信端点をロックを解除する。*/
     636                /* 通信端点をロックを解除する。*/
    659637                syscall(sig_sem(cep->semid_lock));
    660638
    661                 /* パケットを送信する。*/
     639                /* パケットを送信する。*/
    662640                error = udp_send_data(cep, p_dstaddr, data, len, tmout);
    663641
    664642#ifdef UDP_CFG_EXTENTIONS
    665643
    666                 /* å¾
    667 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    668 å ±ã‚’返す。*/
     644                /* 待ち中に発生したエラー情報を返す。*/
    669645                if (error == E_RLWAI)
    670646                        error = cep->error;
     
    681657
    682658/*
    683  *  udp_rcv_dat -- パケットの受信【標準機能】
     659 *  udp_rcv_dat -- パケットの受信【標準機能】
    684660 */
    685661
     
    693669        uint_t          ulen, uhoff;
    694670
    695         /* p_dstaddr または data が NULL 、len < 0 か、tmout が TMO_NBLK ならエラー */
     671        /* p_dstaddr または data が NULL 、len < 0 か、tmout が TMO_NBLK ならエラー */
    696672        if (p_dstaddr == NULL || data == NULL || len < 0 || tmout == TMO_NBLK)
    697673                return E_PAR;
    698674
    699         /* UDP 通信端点 ID をチェックする。*/
     675        /* UDP 通信端点 ID をチェックする。*/
    700676        if (!VALID_UDP_CEPID(cepid))
    701677                return E_ID;
    702678
    703         /* UDP 通信端点を得る。*/
     679        /* UDP 通信端点を得る。*/
    704680        cep = GET_UDP_CEP(cepid);
    705681
    706         /* UDP 通信端点をチェックする。*/
     682        /* UDP 通信端点をチェックする。*/
    707683        if (!VALID_UDP_CEP(cep))
    708684                return E_NOEXS;
    709685
    710         /* 通信端点をロックする。*/
     686        /* 通信端点をロックする。*/
    711687        syscall(wai_sem(cep->semid_lock));
    712688
    713689        if (cep->rcv_tskid != TA_NULL) {
    714690
    715                 /* 非ノンブロッキングコールでペンディング中 */
     691                /* 非ノンブロッキングコールでペンディング中 */
    716692                error = E_QOVR;
    717693
    718                 /* 通信端点をロックを解除する。*/
     694                /* 通信端点をロックを解除する。*/
    719695                syscall(sig_sem(cep->semid_lock));
    720696                }
    721697        else {
    722698
    723                 /* 現在のタスク識別子を記録する。*/
     699                /* 現在のタスク識別子を記録する。*/
    724700                get_tid(&(cep->rcv_tskid));
    725701
    726702#ifdef UDP_CFG_EXTENTIONS
    727703
    728                 /* å¾
    729 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    730 å ±ã‚’リセットする。*/
     704                /* 待ち中に発生したエラー情報をリセットする。*/
    731705                cep->error = E_OK;
    732706
    733707#endif  /* of #ifdef UDP_CFG_EXTENTIONS */
    734708
    735                 /* 通信端点をロックを解除する。*/
     709                /* 通信端点をロックを解除する。*/
    736710                syscall(sig_sem(cep->semid_lock));
    737711
    738                 /* å
    739 ¥åŠ›ãŒã‚るまでå¾
    740 ã¤ã€‚*/
     712                /* 入力があるまで待つ。*/
    741713                if (cep->cb_netbuf != NULL) {
    742714
    743715                        /*
    744                          *  ここにくる場合は、コールバック関数の中から
    745                          *  udp_rcv_dat を呼び出していることになり、
    746                          *  すでにå
    747 ¥åŠ›æ¸ˆã¿ã§ã‚る。
     716                         *  ここにくる場合は、コールバック関数の中から
     717                         *  udp_rcv_dat を呼び出していることになり、
     718                         *  すでに入力済みである。
    748719                         */
    749720                        input = cep->cb_netbuf;
     
    754725#ifdef UDP_CFG_EXTENTIONS
    755726
    756                         /* å¾
    757 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    758 å ±ã‚’返す。*/
     727                        /* 待ち中に発生したエラー情報を返す。*/
    759728                        if (error == E_RLWAI)
    760729                                error = cep->error;
     
    766735                        }
    767736
    768                 /* p_dstaddr を設定する。*/
     737                /* p_dstaddr を設定する。*/
    769738                uhoff = (uint_t)GET_UDP_HDR_OFFSET(input);
    770739                udph = GET_UDP_HDR(input, uhoff);
     
    772741                IN_COPY_TO_HOST(&p_dstaddr->ipaddr, &GET_IP_HDR(input)->src);
    773742
    774                 /* データをバッファに移す。*/
     743                /* データをバッファに移す。*/
    775744                ulen = ntohs(udph->ulen);
    776745                if (ulen - UDP_HDR_SIZE > len)
Note: See TracChangeset for help on using the changeset viewer.