长跑运行后,socket recv的时候返回22的异常
长跑运行后,socket recv的时候返回22的错误
在dell R710的服务上运行了我的服务端,接收客户端发送的数据,有100个客户端,数据大概为300Mb/s,长跑运行后有一个客户端总是掉线,看了日志发现read()读取socket数据的时候,总是出现err=22的错误,就把链路关闭了。为什么会这样呢?一般是什么情况导致22的错误的。
在这台机器上,在该进程中同时有另外一个模块和java进程进行通讯的进程,也在本机上,数据也大概是300Mb/s的样子,由于java人员对链路处理的不好,总是会导致大量的socket状态为TIME_WAIT,我估计是这样导致了网卡出问题了,具体的原因不知道,求帮助.
------解决方案--------------------
根据返回是 设备不识别此命令
关于错误提示你可以用vc6的error lookup,在菜单Tool->errol lookup里面
------解决方案--------------------
能否抓包?出问题时看看socket数量是否达到了上限,TIME_WAIT时间太长,导致该socket不能释放.
------解决方案--------------------
网络是由双向通信关闭后才能正确关闭,就算你shutdown(socketFd, 0);close(socketFd);FIN->FIN-ACK->ACK缺了后面对方回复的ACK,这个socket就一直会挂着等待对方的回应,直到超时.如果不是socket超出限制了,那就和客户端反复连接的次数关系不大,可以把注意力放在持续连接时间超过过久后,会出问题.
在dell R710的服务上运行了我的服务端,接收客户端发送的数据,有100个客户端,数据大概为300Mb/s,长跑运行后有一个客户端总是掉线,看了日志发现read()读取socket数据的时候,总是出现err=22的错误,就把链路关闭了。为什么会这样呢?一般是什么情况导致22的错误的。
在这台机器上,在该进程中同时有另外一个模块和java进程进行通讯的进程,也在本机上,数据也大概是300Mb/s的样子,由于java人员对链路处理的不好,总是会导致大量的socket状态为TIME_WAIT,我估计是这样导致了网卡出问题了,具体的原因不知道,求帮助.
------解决方案--------------------
根据返回是 设备不识别此命令
关于错误提示你可以用vc6的error lookup,在菜单Tool->errol lookup里面
------解决方案--------------------
能否抓包?出问题时看看socket数量是否达到了上限,TIME_WAIT时间太长,导致该socket不能释放.
------解决方案--------------------
网络是由双向通信关闭后才能正确关闭,就算你shutdown(socketFd, 0);close(socketFd);FIN->FIN-ACK->ACK缺了后面对方回复的ACK,这个socket就一直会挂着等待对方的回应,直到超时.如果不是socket超出限制了,那就和客户端反复连接的次数关系不大,可以把注意力放在持续连接时间超过过久后,会出问题.