0

以下のように、ブロッキングスタイルrecv()またはrecvfrom()使用されている場合

 while(1){
     recv(sock_fd, buf, n, 0);    // when it returns and continue to execute the next line
     do_something();
     .....
   }

UDP の場合recv()、UDP パケットを取得すると返されます。

しかし、TCPはバイトストリームなので、いつrecv()返すかのルールはないようです。誰かがこれを少し説明できますか?ありがとう

4

1 に答える 1

1

ストリーム ソケットの場合recv()、配信できるデータがすべてあるとすぐに戻ります。for と同じルールですread()(非ソケット ファイル記述子の場合)。つまり、1 バイトしか受信しない可能性があります。recv()(またはrecvmsg()またはrecvfrom()またはread()) が返されると、たまたま利用可能でバッファに収まるすべてのデータを取得するため、実際には一度に 1 バイト以上のデータを取得する可能性が非常に高くなります。1バイト待ってから。

于 2013-04-12T22:15:34.247 に答える