调用I / O或sleep()后UDP sendto()失败

时间:2014-10-23 06:53:47

标签: c sockets networking

我遇到了一个非常奇怪的错误。我有一个struct sender,它封装了UDP sendto()所需的资源。发件人使用send()方法封装了BSD套接字sendto()

以下代码有效。

  alice = sender(bob_ip, bob_port);
  alice.send();

BUG 以下代码失败

  alice = sender(bob_ip, bob_port);
  puts("====");
  alice.send();

如此奇怪,如果我在{{1}内放置I / O或睡眠操作(例如,put(" ====")) }} 方法。它仍然有效。

有人可以解释为什么会这样吗? 完整源代码:

alice.send()

1 个答案:

答案 0 :(得分:0)

您正在初始化结构以指向仅在init()函数中作为本地存在的变量。

只要该函数退出,这些指针就会无效并解除引用它们(因为sendto()会将指针传递给它)。会给你不确定的行为。

您应该将实际地址数据添加到结构本身,因此它会保持不变。