我在UDP套接字上设置SO_RCVLOWAT(接收低水位标记)选项,但它不起作用

时间:2012-09-18 14:32:43

标签: c sockets

我正在使用C网络编程在UDP套接字上设置套接字选项SO_RCVLOWAT。我成功了,如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);

1 个答案:

答案 0 :(得分:1)

不应该在UDP中产生这种效果。 recvfrom()一次收到一个数据报。如果您希望一次收到多个,请使用recvmsg()