簡體   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