1

我已经被这个问题困扰了好几天,我真的不知道这是从哪里来的。

我正在做一个通过 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);

提前感谢您的帮助,如果您需要更具体的信息,请询问我。

4

0 回答 0