【问题标题】:Why would adding a send() call make a previous send() call fail?为什么添加 send() 调用会使之前的 send() 调用失败?
【发布时间】:2019-04-20 03:42:57
【问题描述】:

代码在底部。

第 207 行的 send() 命令本身就可以正常工作。但是,当我在第 218 行添加 send() 命令时,第一个命令失败 - 给出错误“错误地址”。我已经确认第二个 send() 命令实际上并没有被执行。

我完全迷路了……

【问题讨论】:

  • 将您的代码发布为纯文本,而不是图像。有关代码格式化帮助,请参阅 formatting。
  • 这段代码是循环的一部分吗?也许是上一次迭代中的第二个send() 导致下一次第一个失败。
  • 为什么你使用BUFFER_SIZE作为发送长度,即使你发送不同大小的字符串?

标签: c sockets tcp server send


【解决方案1】:

您似乎正在通过使用BUFFER_SIZE 作为发送量来创建未定义的行为,因为这不太可能是两个字符串的长度。添加第二个send() 调用可能会更改字符串的内存布局,从而导致您遇到错误。

应该是:

send(newsock_fd, "No such command in history", sizeof "No such command in history", 0);

如果您不想发送尾随空字节,请从 sizeof 中减去 1。

【讨论】:

    猜你喜欢
    • 2017-10-22
    • 1970-01-01
    • 2021-08-20
    • 2014-09-02
    • 2015-11-12
    • 1970-01-01
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多