TCP/IP と通信する 2 つのプログラムがあります。これはうまくいきます。
プログラム A が TCP ソケットを開きます。プログラム B はこのソケットに接続します。プログラム B はプログラム A にデータを渡します。すべて正常に動作します。
しかし、A と B の間にリレーを配置し、バイト ストリームを渡すだけで問題が発生します。
プログラム C は、2 つの TCP ソケット (socket1、socket2) を開きます。プログラム B は、このソケット (socket1) に接続します。プログラム A は、このソケット (socket2) に接続します。
プログラム C は、次のコードで TCP ストリームを B から A に中継します。(これはLinuxに基づいています)
char buf[BUFSIZE];
while(1){
// recv a packet segment
if( my_recv(socket1, buf, BUFSIZE) <= 0 ){
return 0;
}
if( send(socket2, buf, BUFSIZE, MSG_NOSIGNAL) != BUFSIZE ){
return 0;
}
}
my_recv は、recv が要求サイズを recv することを保証するためのラッパーです。
int my_recv(int sd, char* p, unsigned int len){
// recv a packet segment
unsigned int ssize=0;
int d;
while(ssize < len){
if( (d=recv( sd, p+ssize, len - ssize, 0))<=0){
return -1;
}
ssize += d;
}
return ssize;
}
これは初めてうまくいきます。しかし、数秒後、すべてが台無しになります。
プログラム A と B をデバッグしました。問題はありません。彼らは正しい順序で送受信しますが、リレーが誤ったデータを与えるようです...
いくつかのアドバイスをいただければ幸いです。
前もって感謝します。