gpt4 book ai didi

c - 了解非阻塞套接字上的 EWOULDBLOCK

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:20:52 25 4
gpt4 key购买 nike

我正在尝试从远程 GUI 应用程序访问路由器上的系统日志消息。基本上路由器上的 WEB 服务器打开系统日志文件 (/var/log/messages),读取所有日志消息并尝试根据用户请求通过此 WEB 套接字将其发送到客户端 GUI 应用程序。它是一个非阻塞套接字。所以我观察到当消息数量很大时(发送缓冲区的大小很大),在调用 send() 调用时,它总是返回 -1 并出现错误 EWOULDBLOCK。我多次尝试重新发出调用,结果相同。这是否意味着 TCP/IP 堆栈上的发送缓冲区已满?那么如何避免呢?我什至观察到当发送缓冲区较少时,send() 成功发送数据。感谢您提前回复?

最佳答案

您可以将发送缓冲区设置为较大的大小:

int                     sendbuf         = -1; /* -1 will give a maximum allowed buffer size you can use any larger number */
rc = setsockopt(sd, SOL_SOCKET, SO_SNDBUF,(char *)&sendbuf, sizeof(sendbuf));
if(rc < 0){
printf(("Setting SO_SNDBUF error, %s",strerror(errno)));
return -1;
}

为避免 EWOULDBLOCK(当发送缓冲区已满时会发生此错误),您应该使用 iomux(epoll、poll 或 select)此外,当尝试接收时接收缓冲区为空时会发生此错误。

关于c - 了解非阻塞套接字上的 EWOULDBLOCK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21968919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com