我已经坚持这个问题好几天了,我真的无法弄清楚它来自哪里。
我正在做一个通过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);
提前感谢您的帮助,并询问我是否需要更具体的信息。