我已经被这个问题困扰了好几天,我真的不知道这是从哪里来的。
我正在做一个通过 UDP 通信的程序。我正在使用该sendto()
方法在程序之间进行通信。此外,还有一个用户打开和使用的 UI TCP 套接字,通过 telnet 管理程序。telnet 部分 100% 与程序的其他功能一起工作。
问题是,当我使用该sendto()
方法时,程序完全阻塞并且 Telnet 连接断开(通信已被主机切断,它说)。我的问题是,当程序阻塞时,我无法弄清楚为什么sendto()
会失败,因为它不会执行后面的内容。即使有类似的东西:
if(sendto(...)<0)
{
perror("Sendto error :");
}
没有任何反应,我无法获得任何信息errno
。telnet 连接中断的事实对我来说似乎很奇怪,因为它位于一个非常不同的端口上,因此不应该像这样中断。我试图将我的 UDP 套接字设置为非阻塞,但它仍然不起作用。这是代码的非工作部分:
struct sockaddr_in address;
hp = gethostbyname(myaddr);
address.sin_family = AF_INET;
address.sin_port = htons(udp_port);
memcpy(&(address.sin_addr.s_addr), hp->h_addr, hp->h_length);
sendto(fd, buffer, buffer_size, 0, (struct sockaddr *)&address, sizeof(address));
close(fd);
提前感谢您的帮助,如果您需要更具体的信息,请询问我。