1

C ネットワーク プログラミングを使用SO_RCVLOWATして、UDP ソケットのソケット オプションを設定しています。の戻り値の通り成功しましたgetsockopt()。問題: ゼロより大きいデータ サイズを受信できます。

例: クライアント側でソケット オプション SO_RCVLOWAT 値を 1024 バイトに設定し、サーバーがクライアントに 256 バイトを送信しました。256 バイトを受信できますが、受信最低水準点が 1024 バイトであるため、実際にはこのメッセージを受信するべきではありません。

関連コード:

rc = setsockopt(sd, SOL_SOCKET, SO_RCVLOWAT, (char *)&recvlowat, sizeof(recvlowat));
        if(rc < 0){
                VL_MISC_ERR(("Setting SO_RCVLOWAT option error, %s",strerror(errno)));
                return -1;
        }

sd: 有効なファイル記述子

それから私は使用しますrecvfrom

c = recvfrom(sd, databuf,  datalen, 0, (struct sockaddr_in *)&localSock, &addrlen);
4

1 に答える 1

2

UDPではそのような効果は想定されていません。recvfrom()一度に1つのデータグラムを受信します。一度に複数を受け取りたい場合は、を使用してrecvmsg()ください。

于 2012-09-18T23:58:01.590 に答える