Changeset 389 for azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcpn_usrreq.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/tinet/netinet/tcpn_usrreq.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * 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プロジェクトを免責すること. 36 25 * 37 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 38 ã 39 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã 40 * å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´ 41 * æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼ 26 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 27 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も 28 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直 29 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない. 42 30 * 43 31 * @(#) $Id$ … … 85 73 86 74 /* 87 * tcp_cre_rep -- TCP åä»å£ã®çæãæ¡å¼µæ©è½ã75 * tcp_cre_rep -- TCP 受付口の生成【拡張機能】 88 76 */ 89 77 … … 96 84 ER error; 97 85 98 /* TCP åä»å£ ID ããã§ãã¯ããã*/86 /* TCP 受付口 ID をチェックする。*/ 99 87 if (!VALID_TCP_REPID(repid)) 100 88 return E_ID; 101 89 102 /* pk_crep ã NULL ãªãã¨ã©ã¼*/90 /* pk_crep が NULL ならエラー */ 103 91 if (pk_crep == NULL) 104 92 return E_PAR; … … 107 95 108 96 /* 109 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã110 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼97 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 98 * IPv4 射影アドレスが指定されたらエラー 111 99 */ 112 100 if (in6_is_addr_ipv4mapped(&pk_crep->myaddr.ipaddr)) … … 115 103 #endif /* of #if (API_PROTO == API_PROTO_IPV6) && !defined(DAPI_CFG_IP4MAPPED_ADDR) */ 116 104 117 /* TCP åä»å£ãå¾ãã*/105 /* TCP 受付口を得る。*/ 118 106 rep = GET_TCP_REP(repid); 119 107 120 /* TCP åä»å£ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/108 /* TCP 受付口が、動的生成用でなければエラー */ 121 109 if (!DYNAMIC_TCP_REP(rep)) 122 110 return E_ID; 123 111 124 /* åä»å£ãããã¯ããã*/112 /* 受付口をロックする。*/ 125 113 syscall(wai_sem(rep->semid_lock)); 126 114 127 115 /* 128 * TCP åä»å£ããã§ãã¯ãããçææ¸ã¿ã§ããã°ã¨ã©ã¼116 * TCP 受付口をチェックする。生成済みであればエラー 129 117 */ 130 118 if (VALID_TCP_REP(rep)) … … 132 120 else { 133 121 134 /* TCP åä»å£çææ 135 å ±ãã³ãã¼ããã*/ 136 rep->repatr = pk_crep->repatr; /* åä»å£å±æ§ */ 137 rep->myaddr.ipaddr = pk_crep->myaddr.ipaddr; /* èªåã®ã¢ãã¬ã¹ */ 138 rep->myaddr.portno = pk_crep->myaddr.portno; /* èªåã®ã¢ãã¬ã¹ */ 139 140 /* TCP åä»å£ãçææ¸ã¿ã«ããã*/ 122 /* TCP 受付口生成情報をコピーする。*/ 123 rep->repatr = pk_crep->repatr; /* 受付口属性 */ 124 rep->myaddr.ipaddr = pk_crep->myaddr.ipaddr; /* 自分のアドレス */ 125 rep->myaddr.portno = pk_crep->myaddr.portno; /* 自分のアドレス */ 126 127 /* TCP 受付口を生成済みにする。*/ 141 128 rep->flags |= TCP_REP_FLG_VALID; 142 129 error = E_OK; 143 130 } 144 131 145 /* åä»å£ã®ããã¯ã解é¤ããã*/132 /* 受付口のロックを解除する。*/ 146 133 syscall(sig_sem(rep->semid_lock)); 147 134 … … 154 141 155 142 /* 156 * tcp_find_cep_rep -- TCP åä»å£ããªã³ã¯ãã¦ãã TCP é信端ç¹ãå¾ãã143 * tcp_find_cep_rep -- TCP 受付口をリンクしている TCP 通信端点を得る。 157 144 */ 158 145 … … 176 163 177 164 /* 178 * tcp_del_rep_body -- TCP åä»å£ã®åé¤ãæ¡å¼µæ©è½ãã®æ¬ä½165 * tcp_del_rep_body -- TCP 受付口の削除【拡張機能】の本体 179 166 */ 180 167 … … 186 173 ER error = E_OK; 187 174 188 /* TCP åä»å£ ID ã®ãã§ãã¯ã¯çµäºãã¦ããã*/189 190 /* TCP åä»å£ãå¾ãã*/175 /* TCP 受付口 ID のチェックは終了している。*/ 176 177 /* TCP 受付口を得る。*/ 191 178 rep = GET_TCP_REP(repid); 192 179 193 /* TCP åä»å£ããåççæç¨ã§ãªããã°ã¨ã©ã¼*/180 /* TCP 受付口が、動的生成用でなければエラー */ 194 181 if (!DYNAMIC_TCP_REP(rep)) 195 182 return E_ID; 196 183 197 /* åä»å£ãããã¯ããã*/184 /* 受付口をロックする。*/ 198 185 syscall(wai_sem(rep->semid_lock)); 199 186 200 /* TCP åä»å£ããã§ãã¯ãããæªçæã®å ´åã¯ã¨ã©ã¼*/187 /* TCP 受付口をチェックする。未生成の場合はエラー */ 201 188 if (!VALID_TCP_REP(rep)) 202 189 error = E_NOEXS; … … 204 191 if ((cep = TCP_FIND_CEP_REP(rep)) != NULL) { 205 192 /* 206 * ãã§ã«ååãªã¼ãã³ãã¦ããã¨ã207 * ï¼tcp_acp_cep ãå¼ã°ãã¦ããã¨ãï¼ã¯ã208 * tcp_acp_cep ãçµäºãããã193 * すでに受動オープンしているとき 194 *(tcp_acp_cep が呼ばれているとき)は、 195 * tcp_acp_cep を終了させる。 209 196 */ 210 197 211 /* é信端ç¹ãããã¯ããã*/198 /* 通信端点をロックする。*/ 212 199 syscall(wai_sem(cep->semid_lock)); 213 200 214 201 /* 215 * é信端ç¹ããåä»å£ã解æ¾ãã216 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã202 * 通信端点から受付口を解放し、 203 * イベントフラグをクローズに設定する。 217 204 */ 218 205 cep->rep = NULL; … … 254 241 cep->rcv_tfn = TFN_TCP_UNDEF; 255 242 256 /* é信端ç¹ã®ããã¯ã解é¤ããã*/243 /* 通信端点のロックを解除する。*/ 257 244 syscall(sig_sem(cep->semid_lock)); 258 245 … … 261 248 error = E_OK; 262 249 263 /* TCP åä»å£ãæªçæã«ããã*/250 /* TCP 受付口を未生成にする。*/ 264 251 rep->flags &= ~TCP_REP_FLG_VALID; 265 252 } 266 253 267 /* åä»å£ã®ããã¯ã解é¤ããã*/254 /* 受付口のロックを解除する。*/ 268 255 syscall(sig_sem(rep->semid_lock)); 269 256 … … 280 267 281 268 /* 282 * tcp_acp_cep -- æ¥ç¶è¦æ±å¾ 283 ã¡ (ååãªã¼ãã³)ãæ¨æºæ©è½ã 269 * tcp_acp_cep -- 接続要求待ち (受動オープン)【標準機能】 284 270 */ 285 271 … … 297 283 298 284 /* 299 * API (tcp6_acp_cep 㨠tcp_acp_cep) ã¨ã300 * TCP é信端ç¹ã®ãããã³ã«ãçç¾ãã¦ããã°ã¨ã©ã¼285 * API (tcp6_acp_cep と tcp_acp_cep) と、 286 * TCP通信端点のプロトコルが矛盾していればエラー 301 287 */ 302 288 … … 317 303 #endif /* of #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) */ 318 304 319 /* TCP åä»å£ããã§ãã¯ããã*/305 /* TCP 受付口をチェックする。*/ 320 306 if (!VALID_TCP_REPID(repid)) 321 307 return E_ID; … … 323 309 #ifdef TCP_CFG_NON_BLOCKING 324 310 325 /* p_dstaddr ã NULL ãªãã¨ã©ã¼*/311 /* p_dstaddr が NULL ならエラー */ 326 312 if (p_dstaddr == NULL) 327 313 return E_PAR; … … 329 315 #else /* of #ifdef TCP_CFG_NON_BLOCKING */ 330 316 331 /* p_dstaddr ã NULL ããtmout ã TMO_NBLK ãªãã¨ã©ã¼*/317 /* p_dstaddr が NULL か、tmout が TMO_NBLK ならエラー */ 332 318 if (p_dstaddr == NULL || tmout == TMO_NBLK) 333 319 return E_PAR; … … 338 324 339 325 /* 340 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã341 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼326 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 327 * IPv4 射影アドレスが指定されたらエラー 342 328 */ 343 329 if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr)) … … 347 333 348 334 /* 349 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã350 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼335 * CEP をロックし、API 機能コードとタスク識別子を記録する。 336 * すでに記録されていれば、ペンディング中なのでエラー 351 337 */ 352 338 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_ACP_CEP)) != E_OK) 353 339 return error; 354 340 355 /* CEP ã® FSM ãã¯ãã¼ãºç¶æ 356 ã§ãªããã°ã¨ã©ã¼ã*/ 341 /* CEP の FSM がクローズ状態でなければエラー。*/ 357 342 if (cep->fsm_state != TCP_FSM_CLOSED) { 358 343 error = E_OBJ; … … 361 346 syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED))); 362 347 363 /* TCP é信端ç¹ãåæåããã*/348 /* TCP 通信端点を初期化する。*/ 364 349 tcp_init_cep(cep); 365 350 366 /* TCP åä»å£ãå¾ãã*/351 /* TCP 受付口を得る。*/ 367 352 368 353 rep = GET_TCP_REP(repid); … … 370 355 #ifdef TCP_CFG_EXTENTIONS 371 356 372 /* TCP åä»å£ãããã¯ããã*/357 /* TCP 受付口をロックする。*/ 373 358 syscall(wai_sem(rep->semid_lock)); 374 359 375 /* TCP åä»å£ããã§ãã¯ããã*/360 /* TCP 受付口をチェックする。*/ 376 361 if (!VALID_TCP_REP(rep)) { 377 362 syscall(sig_sem(rep->semid_lock)); … … 382 367 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 383 368 384 /* TCP é信端ç¹ã«TCPåä»å£ãè¨é²ããã*/369 /* TCP 通信端点にTCP受付口を記録する。*/ 385 370 386 371 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) … … 404 389 #ifdef TCP_CFG_EXTENTIONS 405 390 406 /* TCP åä»å£ã®ããã¯ã解é¤ããã*/391 /* TCP 受付口のロックを解除する。*/ 407 392 syscall(sig_sem(rep->semid_lock)); 408 393 409 394 #endif /* of #ifdef TCP_CFG_EXTENTIONS */ 410 395 411 /* TCP åä»å£ã®ã¢ãã¬ã¹ãã³ãã¼ããã*/396 /* TCP 受付口のアドレスをコピーする。*/ 412 397 413 398 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && (API_PROTO == API_PROTO_IPV4) … … 428 413 #if API_PROTO == API_PROTO_IPV4 429 414 430 /* TCP é信端ç¹ã®ãããã¯ã¼ã¯å±¤ãããã³ã«ãè¨å®ããã*/415 /* TCP 通信端点のネットワーク層プロトコルを設定する。*/ 431 416 cep->flags |= TCP_CEP_FLG_IPV4; 432 417 433 418 #endif /* of #if API_PROTO == API_PROTO_IPV4 */ 434 419 435 /* é信端ç¹ãè¨å®ããã*/420 /* 通信端点を設定する。*/ 436 421 cep->fsm_state = TCP_FSM_LISTEN; 437 422 438 423 #ifdef TCP_CFG_NON_BLOCKING 439 424 440 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/425 /* タイムアウトをチェックする。*/ 441 426 if (tmout == TMO_NBLK) { 442 /* ãã³ããããã³ã°ã³ã¼ã«*/427 /* ノンブロッキングコール */ 443 428 444 429 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) … … 470 455 471 456 /* 472 * FSM ã ESTABLISHED ã«ãªãã¾ã§å¾ 473 ã¤ã 474 * FSM ã CLOSED ã«ãªã£ãå ´åã¯ãã¨ã©ã¼ãçºçãããã¨ãæå³ãã¦ããã 457 * FSM が ESTABLISHED になるまで待つ。 458 * FSM が CLOSED になった場合は、エラーが発生したことを意味している。 475 459 */ 476 460 error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED | … … 486 470 487 471 if (error == E_OK) { 488 /* ç¸æã®ã¢ãã¬ã¹ãã³ãã¼ããã*/472 /* 相手のアドレスをコピーする。*/ 489 473 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) && (API_PROTO == API_PROTO_IPV4) 490 474 p_dstaddr->ipaddr = ntohl(cep->dstaddr.ipaddr.s6_addr32[3]); … … 496 480 else { 497 481 /* 498 * é信端ç¹ããåä»å£ã解æ¾ãã499 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã482 * 通信端点から受付口を解放し、 483 * イベントフラグをクローズに設定する。 500 484 */ 501 485 cep->rep = NULL; … … 526 510 527 511 /* 528 * tcp_con_cep -- æ¥ç¶è¦æ± (è½åãªã¼ãã³)ãæ¨æºæ©è½ã512 * tcp_con_cep -- 接続要求 (能動オープン)【標準機能】 529 513 */ 530 514 … … 541 525 542 526 /* 543 * API (tcp6_acp_cep 㨠tcp_acp_cep) ã¨ã544 * TCP é信端ç¹ã®ãããã³ã«ãçç¾ãã¦ããã°ã¨ã©ã¼527 * API (tcp6_acp_cep と tcp_acp_cep) と、 528 * TCP通信端点のプロトコルが矛盾していればエラー 545 529 */ 546 530 … … 562 546 563 547 /* 564 * ãã¦å 565 ããã«ããã£ã¹ãã¢ãã¬ã¹ãªãã¨ã©ã¼ 548 * あて先がマルチキャストアドレスならエラー 566 549 */ 567 550 … … 581 564 582 565 /* 583 * API ã IPv6 㧠IPv4 å°å½±ã¢ãã¬ã¹ãèªãããã¦ããªãã®ã«ããããããã584 * IPv4 å°å½±ã¢ãã¬ã¹ãæå®ããããã¨ã©ã¼566 * API が IPv6 で IPv4 射影アドレスが認められていないのにもかかわらず、 567 * IPv4 射影アドレスが指定されたらエラー 585 568 */ 586 569 if (in6_is_addr_ipv4mapped(&p_dstaddr->ipaddr)) … … 592 575 593 576 /* 594 * p_dstaddr ã¾ã㯠p_myaddr ã NULL ãªãã¨ã©ã¼577 * p_dstaddr または p_myaddr が NULL ならエラー 595 578 */ 596 579 if (p_myaddr == NULL || p_dstaddr == NULL) … … 600 583 601 584 /* 602 * p_dstaddr ã¾ã㯠p_myaddr ã NULL ã603 * tmout ã TMO_NBLK ãªãã¨ã©ã¼585 * p_dstaddr または p_myaddr が NULL 、 586 * tmout が TMO_NBLK ならエラー 604 587 */ 605 588 if (p_myaddr == NULL || p_dstaddr == NULL || tmout == TMO_NBLK) … … 609 592 610 593 /* 611 * CEP ãããã¯ããAPI æ©è½ã³ã¼ãã¨ã¿ã¹ã¯èå¥åãè¨é²ããã612 * ãã§ã«è¨é²ããã¦ããã°ããã³ãã£ã³ã°ä¸ãªã®ã§ã¨ã©ã¼594 * CEP をロックし、API 機能コードとタスク識別子を記録する。 595 * すでに記録されていれば、ペンディング中なのでエラー 613 596 */ 614 597 if ((error = tcp_lock_cep(cepid, &cep, TFN_TCP_CON_CEP)) != E_OK) 615 598 return error; 616 599 617 /* CEP ã® FSM ãã¯ãã¼ãºç¶æ 618 ã§ãªããã°ã¨ã©ã¼ã*/ 600 /* CEP の FSM がクローズ状態でなければエラー。*/ 619 601 if (cep->fsm_state != TCP_FSM_CLOSED) { 620 602 error = E_OBJ; … … 623 605 syscall(clr_flg(cep->est_flgid, (FLGPTN)(~TCP_CEP_EVT_CLOSED))); 624 606 625 /* ã·ã¼ã±ã³ã¹çªå·ãåæåããã*/607 /* シーケンス番号を初期化する。*/ 626 608 if (tcp_iss == 0) 627 609 tcp_init_iss(); 628 610 629 /* é信端ç¹ãåæåããã*/611 /* 通信端点を初期化する。*/ 630 612 tcp_init_cep(cep); 631 613 632 614 /* 633 * IP ã¢ãã¬ã¹ãè¨å®ããã634 * p_myaddr ã NADR (-1) ã§ã¯ãªããèª IP ã¢ãã¬ã¹ã ANY ã§ãªããã°ã635 * æå®ããã IP ã¢ãã¬ã¹ãå²ãå½ã¦ãã615 * IP アドレスを設定する。 616 * p_myaddr が NADR (-1) ではなく、自 IP アドレスが ANY でなければ、 617 * 指定された IP アドレスを割り当てる。 636 618 */ 637 619 … … 663 645 #if API_PROTO == API_PROTO_IPV4 664 646 665 /* TCP é信端ç¹ã®ãããã¯ã¼ã¯å±¤ãããã³ã«ãè¨å®ããã*/647 /* TCP 通信端点のネットワーク層プロトコルを設定する。*/ 666 648 cep->flags |= TCP_CEP_FLG_IPV4; 667 649 668 650 #endif /* of #if API_PROTO == API_PROTO_IPV4 */ 669 651 670 /* é信端ç¹ãè¨å®ããã*/652 /* 通信端点を設定する。*/ 671 653 //NET_DEBUG_TCP5("tcp_con_cep3[c=%d,d=%lI.%d,s=%lI.%d]\n", 672 654 cep->fsm_state = TCP_FSM_SYN_SENT; … … 678 660 #ifdef TCP_CFG_NON_BLOCKING 679 661 680 /* ã¿ã¤ã ã¢ã¦ãããã§ãã¯ããã*/662 /* タイムアウトをチェックする。*/ 681 663 if (tmout == TMO_NBLK) { 682 /* ãã³ããããã³ã°ã³ã¼ã«*/664 /* ノンブロッキングコール */ 683 665 684 666 #if defined(SUPPORT_INET6) && defined(SUPPORT_INET4) … … 709 691 cep->snd_nblk_tfn = TFN_TCP_CON_CEP; 710 692 711 /* ã³ãã¯ã·ã§ã³ã®éè¨ããã¹ãããã*/693 /* コネクションの開設をポストする。*/ 712 694 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 713 695 sig_sem(SEM_TCP_POST_OUTPUT); … … 719 701 720 702 /* 721 * p_myaddr ã NADR (-1) ãã722 * èªãã¼ãçªå·ã TCP_PORTANY ãªããèªåã§å²ãå½ã¦ãã703 * p_myaddr が NADR (-1) か、 704 * 自ポート番号が TCP_PORTANY なら、自動で割り当てる。 723 705 */ 724 706 if (p_myaddr == NADR || p_myaddr->portno == TCP_PORTANY) … … 727 709 goto err_ret; 728 710 729 /* ã³ãã¯ã·ã§ã³ã®éè¨ããã¹ãããã*/711 /* コネクションの開設をポストする。*/ 730 712 cep->flags |= TCP_CEP_FLG_POST_OUTPUT; 731 713 sig_sem(SEM_TCP_POST_OUTPUT); 732 714 733 715 /* 734 * ã¤ãã³ãã ESTABLISHED ã«ãªãã¾ã§å¾ 735 ã¤ã 736 * ã¤ãã³ãã CLOSED ã«ãªã£ãå ´åã¯ãä½ããã®ã¨ã©ã¼ãçºçãããã 737 * æ¥ç¶è¦æ±ãæå¦ããããã¨ãæå³ãã¦ããã 716 * イベントが ESTABLISHED になるまで待つ。 717 * イベントが CLOSED になった場合は、何らかのエラーが発生したか、 718 * 接続要求が拒否されたことを意味している。 738 719 */ 739 720 error = twai_flg(cep->est_flgid, (TCP_CEP_EVT_CLOSED | … … 750 731 if (error != E_OK) { 751 732 /* 752 * é信端ç¹ããåä»å£ã解æ¾ãã753 * ã¤ãã³ããã©ã°ãã¯ãã¼ãºã«è¨å®ããã733 * 通信端点から受付口を解放し、 734 * イベントフラグをクローズに設定する。 754 735 */ 755 736 cep->rep = NULL;
Note:
See TracChangeset
for help on using the changeset viewer.