2018-03-15更新:弄明白connection reset产生的缘由,见从新分析connection reset by peer, socket write error错误缘由html
在开发文件上传功能时遇到了connection reset by peer, socket write error的错误,排查废了一番功夫,记录一下。apache
在网上搜索了一下,获得的缘由有这些:浏览器
可是看了服务器,不太可能;网络情况了也挺好(测试环境而已)。
跟浏览器也不要紧,由于这里上传文件使用的是apache httpclient在上传文件,并且timeout都设置比较长。服务器
最后分析到的问题缘由,出在服务端上。服务端是这么处理的:上传文件时在header里含有了文件信息,上传文件成功,记录文件相关信息在DB;若是再次上传这个文件,根据header的文件信息在DB判断是否已经上传,若是确认是重复文件,则直接返回“文件重复”。(这个业务设计有点bug,暂时忽略)网络
可是如今却遇到重复上传时,客户端httpclient报了“connection reset by peer, socket write error”的错误。并发
是因为在重复上传时,服务端只取了header就判断了文件重复直接response了,这个时候客户端还在“欢快”的传输文件呢,而服务端直接response把链接关闭了,因此客户端就懵逼了,报了错误。socket
这个问题暂时尚未找到技术上如何解决(若是找到,后面再补充),因此在业务上进行解决的。在客户端遇到SocketException时,尝试从新上传前,先查询服务端是否已经完成了此文件的上传,若是已经存在,则不用重复上传了,也就能够避免由于重复上传致使的问题,毕竟重复上传也是为了保证在网络不佳时能补偿。测试