socket error:Error:read ECONNRESET.怎么回事
展开全部
是这样的,首先客户端非法中断,或者调用close(fd)后服务器调用recv或者read,会返回ECONNRESET,这个错误告诉你对端(客户端已经关闭了或者进行重启),理论说遇到这个问题和处理recv/read返回值为0是一个效果,服务器将该链接断开即可。
为避免这个错误可采用以下两个方法:
shutdown(s, SHUT_WR);
close(s);
先关闭写端,强制发送FIN,这样服务器收到后调用recv返回0,可以确定客户端已经关闭。
网上也有人说的
若设置了SO_LINGER并确定了非零的超时间隔,则closesocket()调用阻塞进程,直到所剩数据发送完毕或超时。这种关闭称为“优雅”或“从容”关闭。
struct linger so_linger;
so_linger.l_onoff = true;
so_linger.l_linger = 30;
int z = setsockopt(s,SOL_SOCKET,SO_LINGER, &so_linger,sizeof so_linger);
为避免这个错误可采用以下两个方法:
shutdown(s, SHUT_WR);
close(s);
先关闭写端,强制发送FIN,这样服务器收到后调用recv返回0,可以确定客户端已经关闭。
网上也有人说的
若设置了SO_LINGER并确定了非零的超时间隔,则closesocket()调用阻塞进程,直到所剩数据发送完毕或超时。这种关闭称为“优雅”或“从容”关闭。
struct linger so_linger;
so_linger.l_onoff = true;
so_linger.l_linger = 30;
int z = setsockopt(s,SOL_SOCKET,SO_LINGER, &so_linger,sizeof so_linger);
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询