繁体   English   中英

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

[英]I set SO_RCVLOWAT (Receive Low Water Mark ) option on a UDP socket but it doesn't work

我正在使用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);

不应在UDP中产生这种效果。 recvfrom()一次,一个周期接收一个数据报。 如果您想一次接收多个,请使用recvmsg()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM