舒泽昊 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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?