独立线程连接不同端口时socket send返回10054错误排查
报错10054对应潜在代码问题汇总
Windows Socket错误码10054对应的是WSAECONNRESET,含义为连接被对端强制重置,未走正常的四次挥手断开流程
以下是你当前场景下最可能出现的代码问题:
- 跨线程套接字操作无锁保护:主线程和独立的WebSocket转发线程如果同时操作同一个TCP套接字,没有加互斥锁的情况下,某一侧先调用了
closesocket/close释放连接,另一侧还在执行send操作,就会直接触发该报错 - WebSocket握手逻辑不完整:前端发起WebSocket连接时,你没有按照RFC6455规范完成握手校验,未返回正确的
Sec-WebSocket-Accept响应头,前端校验失败直接主动断开TCP连接,后续你给已经失效的连接发数据就会抛出10054 - 转发端口配置异常:你提到转发线程所用端口和主socket端口无关联,如果该端口未提前在系统防火墙放通,或是被其他进程占用,WebSocket连接建立时内核会直接返回RST包触发报错
- WebSocket数据帧封装错误:你直接把TCP原始数据包转发给WebSocket连接时,没有按照WebSocket协议要求封装数据帧(缺少帧头、掩码位设置错误、长度字段不合法等),前端收到非法帧会直接断开连接,触发服务端发送报错
- 超时逻辑设置不合理:代码中配置的TCP连接或WebSocket连接超时时间过短,连接刚建立就被超时逻辑主动断开,后续发送操作直接触发10054
若提供对应代码片段,可进一步定位到具体出错的代码位置
内容的提问来源于stack exchange,提问作者Taki
相关产品推荐
相关产品推荐

