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_nblk.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$
     
    128116
    129117/*
    130  *  IPv4 と IPv6 の切り替えマクロ
     118 *  IPv4 と IPv6 の切り替えマクロ
    131119 */
    132120
     
    146134
    147135/*
    148  *  TINET をライブラリ化しない場合は、å
    149 ¨ã¦ã®æ©Ÿèƒ½ã‚’
    150  *  オブジェクトファイルに出力するため、マクロを有効にする。
     136 *  TINET をライブラリ化しない場合は、全ての機能を
     137 *  オブジェクトファイルに出力するため、マクロを有効にする。
    151138 */
    152139
     
    165152
    166153/*
    167  *  udp_can_snd -- ペンディングしている送信のキャンセル
     154 *  udp_can_snd -- ペンディングしている送信のキャンセル
    168155 */
    169156
     
    171158udp_can_snd (T_UDP_CEP *cep, ER error)
    172159{
    173         if (cep->snd_p_dstaddr != NULL) {       /* ノンブロッキングコールでペンディング中 */
     160        if (cep->snd_p_dstaddr != NULL) {       /* ノンブロッキングコールでペンディング中 */
    174161                if (IS_PTR_DEFINED(cep->callback))
    175162
     
    188175                cep->snd_p_dstaddr = NULL;
    189176                }
    190         else if (cep->snd_tskid != TA_NULL) {   /* 非ノンブロッキングコールでペンディング中 */
     177        else if (cep->snd_tskid != TA_NULL) {   /* 非ノンブロッキングコールでペンディング中 */
    191178
    192179#ifdef UDP_CFG_EXTENTIONS
    193180
    194                 /* å¾
    195 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    196 å ±ã‚’設定する。*/
     181                /* 待ち中に発生したエラー情報を設定する。*/
    197182                cep->error = error;
    198183
     
    202187                cep->snd_tskid = TA_NULL;
    203188                }
    204         else                                    /* どちらでもないならペンディングしていない */
     189        else                                    /* どちらでもないならペンディングしていない */
    205190                error = EV_NOPND;
    206191
     
    213198
    214199/*
    215  *  udp_can_rcv -- ペンディングしている受信のキャンセル
     200 *  udp_can_rcv -- ペンディングしている受信のキャンセル
    216201 */
    217202
     
    219204udp_can_rcv (T_UDP_CEP *cep, ER error)
    220205{
    221         if (cep->rcv_p_dstaddr != NULL) {       /* ノンブロッキングコールでペンディング中 */
     206        if (cep->rcv_p_dstaddr != NULL) {       /* ノンブロッキングコールでペンディング中 */
    222207                if (IS_PTR_DEFINED(cep->callback))
    223208
     
    236221                cep->rcv_p_dstaddr = NULL;
    237222                }
    238         else if (cep->rcv_tskid != TA_NULL) {   /* 非ノンブロッキングコールでペンディング中 */
     223        else if (cep->rcv_tskid != TA_NULL) {   /* 非ノンブロッキングコールでペンディング中 */
    239224
    240225#ifdef UDP_CFG_EXTENTIONS
    241226
    242                 /* å¾
    243 ã¡ä¸­ã«ç™ºç”Ÿã—たエラーæƒ
    244 å ±ã‚’設定する。*/
     227                /* 待ち中に発生したエラー情報を設定する。*/
    245228                cep->error = error;
    246229
     
    250233                cep->rcv_tskid = TA_NULL;
    251234                }
    252         else                                    /* どちらでもないならペンディングしていない */
     235        else                                    /* どちらでもないならペンディングしていない */
    253236                error = EV_NOPND;
    254237
     
    261244
    262245/*
    263  *  udp_snd_dat -- パケットの送信【標準機能】
     246 *  udp_snd_dat -- パケットの送信【標準機能】
    264247 */
    265248
     
    270253        ER              error;
    271254
    272         /* p_dstaddr または data が NULL ならエラー */
     255        /* p_dstaddr または data が NULL ならエラー */
    273256        if (p_dstaddr == NULL || data == NULL)
    274257                return E_PAR;
    275258
    276         /* データ長をチェックする。*/
     259        /* データ長をチェックする。*/
    277260        if (len < 0 || len + IP_HDR_SIZE + UDP_HDR_SIZE > IF_MTU)
    278261                return E_PAR;
    279262
    280         /* UDP 通信端点 ID をチェックする。*/
     263        /* UDP 通信端点 ID をチェックする。*/
    281264        if (!VALID_UDP_CEPID(cepid))
    282265                return E_ID;
    283266
    284         /* UDP 通信端点を得る。*/
     267        /* UDP 通信端点を得る。*/
    285268        cep = GET_UDP_CEP(cepid);
    286269
    287         /* UDP 通信端点をチェックする。*/
     270        /* UDP 通信端点をチェックする。*/
    288271        if (!VALID_UDP_CEP(cep))
    289272                return E_NOEXS;
    290273
    291274        /*
    292          *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
     275         *  自ポート番号が UDP_PORTANY なら、自動で割り当てる。
    293276         */
    294277        if (cep->myaddr.portno == UDP_PORTANY) {
     
    298281
    299282        /*
    300          * タイムアウトをチェックする。
     283         * タイムアウトをチェックする。
    301284         */
    302285
    303         if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
    304 
    305                 /* 通信端点をロックする。*/
     286        if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
     287
     288                /* 通信端点をロックする。*/
    306289                syscall(wai_sem(cep->semid_lock));
    307290
    308291                if (cep->snd_p_dstaddr != NULL) {
    309292
    310                         /* ノンブロッキングコールでペンディング中 */
     293                        /* ノンブロッキングコールでペンディング中 */
    311294                        error = E_QOVR;
    312295
    313                         /* 通信端点をロックを解除する。*/
     296                        /* 通信端点をロックを解除する。*/
    314297                        syscall(sig_sem(cep->semid_lock));
    315298                        }
    316299                else if (cep->snd_tskid != TA_NULL) {
    317300
    318                         /* 非ノンブロッキングコールでペンディング中 */
    319                         error = E_OBJ;
    320 
    321                         /* 通信端点をロックを解除する。*/
     301                        /* 非ノンブロッキングコールでペンディング中 */
     302                        error = E_OBJ;
     303
     304                        /* 通信端点をロックを解除する。*/
    322305                        syscall(sig_sem(cep->semid_lock));
    323306                        }
     
    328311                        cep->snd_len    = len;
    329312
    330                         /* 通信端点をロックを解除する。*/
     313                        /* 通信端点をロックを解除する。*/
    331314                        syscall(sig_sem(cep->semid_lock));
    332315
     
    336319                        }
    337320                }
    338         else {                          /* 非ノンブロッキングコール */
     321        else {                          /* 非ノンブロッキングコール */
    339322       
    340                 /* 通信端点をロックする。*/
     323                /* 通信端点をロックする。*/
    341324                syscall(wai_sem(cep->semid_lock));
    342325
    343326                if (cep->snd_p_dstaddr != NULL) {
    344327
    345                         /* ノンブロッキングコールでペンディング中 */
    346                         error = E_OBJ;
    347 
    348                         /* 通信端点をロックを解除する。*/
     328                        /* ノンブロッキングコールでペンディング中 */
     329                        error = E_OBJ;
     330
     331                        /* 通信端点をロックを解除する。*/
    349332                        syscall(sig_sem(cep->semid_lock));
    350333                        }
    351334                else if (cep->snd_tskid != TA_NULL) {
    352335
    353                         /* 非ノンブロッキングコールでペンディング中 */
     336                        /* 非ノンブロッキングコールでペンディング中 */
    354337                        error = E_QOVR;
    355338
    356                         /* 通信端点をロックを解除する。*/
     339                        /* 通信端点をロックを解除する。*/
    357340                        syscall(sig_sem(cep->semid_lock));
    358341                        }
    359342                else {
    360343
    361                         /* 現在のタスク識別子を記録する。*/
     344                        /* 現在のタスク識別子を記録する。*/
    362345                        get_tid(&(cep->snd_tskid));
    363346
    364                         /* 通信端点をロックを解除する。*/
    365                         syscall(sig_sem(cep->semid_lock));
    366 
    367                         /* パケットを送信する。*/
     347                        /* 通信端点をロックを解除する。*/
     348                        syscall(sig_sem(cep->semid_lock));
     349
     350                        /* パケットを送信する。*/
    368351                        error = udp_send_data(cep, p_dstaddr, data, len, tmout);
    369352                        }
     
    378361
    379362/*
    380  *  udp_rcv_dat -- パケットの受信【標準機能】
     363 *  udp_rcv_dat -- パケットの受信【標準機能】
    381364 */
    382365
     
    390373        uint_t          ulen, uhoff;
    391374
    392         /* p_dstaddr または data が NULL か、len < 0 ならエラー */
     375        /* p_dstaddr または data が NULL か、len < 0 ならエラー */
    393376        if (p_dstaddr == NULL || data == NULL || len < 0)
    394377                return E_PAR;
    395378
    396         /* UDP 通信端点 ID をチェックする。*/
     379        /* UDP 通信端点 ID をチェックする。*/
    397380        if (!VALID_UDP_CEPID(cepid))
    398381                return E_ID;
    399382
    400         /* UDP 通信端点を得る。*/
     383        /* UDP 通信端点を得る。*/
    401384        cep = GET_UDP_CEP(cepid);
    402385
    403         /* UDP 通信端点をチェックする。*/
     386        /* UDP 通信端点をチェックする。*/
    404387        if (!VALID_UDP_CEP(cep))
    405388                return E_NOEXS;
    406389
    407390        /*
    408          * タイムアウトをチェックする。
     391         * タイムアウトをチェックする。
    409392         */
    410393
    411         if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
    412 
    413                 /* 通信端点をロックする。*/
     394        if (tmout == TMO_NBLK) {        /* ノンブロッキングコール */
     395
     396                /* 通信端点をロックする。*/
    414397                syscall(wai_sem(cep->semid_lock));
    415398
    416399                if (cep->rcv_p_dstaddr != NULL)
    417400
    418                         /* ノンブロッキングコールでペンディング中 */
     401                        /* ノンブロッキングコールでペンディング中 */
    419402                        error = E_QOVR;
    420403
    421404                else if (cep->rcv_tskid != TA_NULL)
    422405
    423                         /* 非ノンブロッキングコールでペンディング中 */
     406                        /* 非ノンブロッキングコールでペンディング中 */
    424407                        error = E_OBJ;
    425408                else {
     
    430413                        }
    431414
    432                 /* 通信端点をロックを解除する。*/
     415                /* 通信端点をロックを解除する。*/
    433416                syscall(sig_sem(cep->semid_lock));
    434417                return error;
    435418                }
    436         else {                          /* 非ノンブロッキングコール */
    437 
    438                 /* 通信端点をロックする。*/
     419        else {                          /* 非ノンブロッキングコール */
     420
     421                /* 通信端点をロックする。*/
    439422                syscall(wai_sem(cep->semid_lock));
    440423
    441424                if (cep->rcv_p_dstaddr != NULL) {
    442425
    443                         /* ノンブロッキングコールでペンディング中 */
    444                         error = E_OBJ;
    445 
    446                         /* 通信端点をロックを解除する。*/
     426                        /* ノンブロッキングコールでペンディング中 */
     427                        error = E_OBJ;
     428
     429                        /* 通信端点をロックを解除する。*/
    447430                        syscall(sig_sem(cep->semid_lock));
    448431                        }
    449432                else if (cep->rcv_tskid != TA_NULL) {
    450433
    451                         /* 非ノンブロッキングコールでペンディング中 */
     434                        /* 非ノンブロッキングコールでペンディング中 */
    452435                        error = E_QOVR;
    453436
    454                         /* 通信端点をロックを解除する。*/
     437                        /* 通信端点をロックを解除する。*/
    455438                        syscall(sig_sem(cep->semid_lock));
    456439                        }
    457440                else {
    458441
    459                         /* 現在のタスク識別子を記録する。*/
     442                        /* 現在のタスク識別子を記録する。*/
    460443                        get_tid(&(cep->rcv_tskid));
    461444
    462                         /* 通信端点をロックを解除する。*/
    463                         syscall(sig_sem(cep->semid_lock));
    464 
    465                         /* å
    466 ¥åŠ›ãŒã‚るまでå¾
    467 ã¤ã€‚*/
     445                        /* 通信端点をロックを解除する。*/
     446                        syscall(sig_sem(cep->semid_lock));
     447
     448                        /* 入力があるまで待つ。*/
    468449                        if (cep->cb_netbuf != NULL) {
    469450
    470451                                /*
    471                                  *  ここにくる場合は、コールバック関数の中から
    472                                  *  udp_rcv_dat を呼び出していることになり、
    473                                  *  すでにå
    474 ¥åŠ›æ¸ˆã¿ã§ã‚る。
     452                                 *  ここにくる場合は、コールバック関数の中から
     453                                 *  udp_rcv_dat を呼び出していることになり、
     454                                 *  すでに入力済みである。
    475455                                 */
    476456                                input = cep->cb_netbuf;
     
    482462                                }
    483463
    484                         /* p_dstaddr を設定する。*/
     464                        /* p_dstaddr を設定する。*/
    485465                        uhoff = (uint_t)GET_UDP_HDR_OFFSET(input);
    486466                        udph = GET_UDP_HDR(input, uhoff);
     
    488468                        IN_COPY_TO_HOST(&p_dstaddr->ipaddr, &GET_IP_HDR(input)->src);
    489469
    490                         /* データをバッファに移す。*/
     470                        /* データをバッファに移す。*/
    491471                        ulen = ntohs(udph->ulen);
    492472                        if (ulen - UDP_HDR_SIZE > len)
Note: See TracChangeset for help on using the changeset viewer.