sendto()失败,切断telnet连接并阻止程序

时间:2012-05-20 21:45:11

标签: c udp telnet blocking errno

我已经坚持这个问题好几天了,我真的无法弄清楚它来自哪里。

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

提前感谢您的帮助,并询问我是否需要更具体的信息。

0 个答案:

没有答案