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()一次接收一个数据报,周期。如果您想一次接收多个,请使用recvmsg().

于 2012-09-18T23:58:01.590 回答