舒泽昊 2018-01-02 01:02 采纳率: 0%
浏览 2108
已结题

Socket通讯中,如果两个客户端同时一刻断开的话,会造成Recv返回的socketID相互覆盖。

Bug:两个客户端趋近于同一时刻关闭的情况,recv返回的是同一个socketID,应该是返回两个socketID才对
现状:启动一个服务器tcpip程序,三台客户端程序,每个20ms连接断开一次,一直循环。
tcp服务器端程序accept阻塞等待客户端连接
tcp服务器端程序recv阻塞等待客户端关闭

[201416][201604]11:44:36 ERROR: accept连接: 端口号54470连接,SOCKET号4852

[201416][201604]11:44:36 ERROR: accept连接: 端口号54726连接,SOCKET号4812

[201416][201604]11:44:36 ERROR: accept连接: 端口号54982连接,SOCKET号4868

[201416][204384]11:44:36 ERROR: recv断开: SOCKET号4852

[201416][204344]11:44:36 ERROR: recv断开: SOCKET号4812

[201416][204432]11:44:36 ERROR: recv断开: SOCKET号4868

[201416][201604]11:44:36 ERROR: accept连接: 端口号55238连接,SOCKET号4880

[201416][201604]11:44:36 ERROR: accept连接: 端口号55494连接,SOCKET号4836

[201416][201604]11:44:36 ERROR: accept连接: 端口号55750连接,SOCKET号4892

[201416][204496]11:44:36 ERROR: recv断开: SOCKET号4880

[201416][204544]11:44:36 ERROR: recv断开: SOCKET号4892

[201416][201604]11:44:36 ERROR: accept连接: 端口号56006连接,SOCKET号4900

[201416][201604]11:44:36 ERROR: accept连接: 端口号56262连接,SOCKET号4860

[201416][203984]11:44:36 ERROR: recv断开: SOCKET号4836

[201416][201604]11:44:36 ERROR: accept连接: 端口号56518连接,SOCKET号4916

[201416][204624]11:44:36 ERROR: recv断开: SOCKET号4916

[201416][204688]11:44:36 ERROR: recv断开: SOCKET号4916

[201416][201604]11:44:36 ERROR: accept连接: 端口号56774连接,SOCKET号4924

[201416][201604]11:44:36 ERROR: accept连接: 端口号57030连接,SOCKET号4884

[201416][204592]11:44:36 ERROR: recv断开: SOCKET号4860

[201416][201604]11:44:36 ERROR: accept连接: 端口号57286连接,SOCKET号4908

[201416][204648]11:44:36 ERROR: recv断开: SOCKET号4884

[201416][201604]11:44:36 ERROR: accept连接: 端口号57542连接,SOCKET号4956

[201416][204664]11:44:36 ERROR: recv断开: SOCKET号4908

[201416][204680]11:44:36 ERROR: recv断开: SOCKET号4884

[201416][201604]11:44:36 ERROR: accept连接: 端口号57798连接,SOCKET号4932

[201416][201604]11:44:36 ERROR: accept连接: 端口号58054连接,SOCKET号4964

[201416][204720]11:44:36 ERROR: recv断开: SOCKET号4956

[201416][204736]11:44:36 ERROR: recv断开: SOCKET号4932

[201416][204752]11:44:36 ERROR: recv断开: SOCKET号4964

[201416][201604]11:44:36 ERROR: accept连接: 端口号58310连接,SOCKET号4972

[201416][201604]11:44:36 ERROR: accept连接: 端口号58566连接,SOCKET号4940

[201416][201604]11:44:36 ERROR: accept连接: 端口号58822连接,SOCKET号4988

[201416][204784]11:44:36 ERROR:

现在的报错,应该和链表没有关系,因为没有用到链表,只打印了recv的值。问题出在了recv中,如果有两个客户端同一时刻断开的时候,recv返回时偶尔会出现同一个socketID.

  • 写回答

6条回答 默认 最新

  • cloudyzhao 2018-01-02 01:09
    关注

    两个节客户端是两个进程还是一个进程

    评论

报告相同问题?

悬赏问题

  • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 lammps拉伸应力应变曲线分析
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
  • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
  • ¥30 python代码,帮调试,帮帮忙吧