TCP/IP

2. TCP/IPの内部処理と信頼性

TCP/IP は Socket と呼ばれる TCP/IP の通信 API によって容易に開発できることと iSeries400 の従来のSNA 接続に比べて軽くて速いことが特徴であるが、 原則的には一回の送受信は最大 1492 バイトまでであることと、SNA のように確実にXXX バイトの送受信が保障されるわけではない。

つまり送信側は垂れ流しのような送信だけであり、確実に相手に届いたかを知る由もない。さらに受信側のシステムはあらかじめ何バイトが送信されてくるかを知っておいて、その分だけを受信するようにしなければならない。
ところがこのような動作原理のおかげでルーター経由やサーバー(iSeries400) と PC クライアントとの処理速度の大幅な違いがある場合は、TCP/IPストリームがうまく捕まえ切れずに TCP/IP ストリームの受信の脱落が発生する。

このことが解説されている書籍は少なく,よくある 「TCP/IP サーバーの Socket による開発例」 をうのみにすると実用レベルで動作しないというとんでもない問題が発生するのでご注意。そのような例を掲示すべきでないと思われるが?

受信の脱落を補正するには受信すべきバイト数に達するまで繰り返し、不足分を読むことである。ただし一回の再読み込みだけでは不足の場合がある。
不足分を補うまで読み返さなければならないが、逆に下手すると永遠ループになるのでこちらへの配慮も必要である。