[英]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.