sendto的问题(no route to host)
本人写了段网络程序,其中在无限循环中调用了函数sendto,在向对方发送udp包的过程中,有时能够发送成功,有时却失败,错误号为113,错误原因为no route to host,下面是具体代码,向大侠请教错误原因
/*
* 在向对方的g_rport端口发送udp包的同时,还要不断监听本机的g_rport端口
*/
void send_hb_udp_msg()
{
int ret;
int sockfd;
int servfd;
char msg[512];
struct sockaddr_in toaddr, servaddr;
sockfd = socket(AF_INET, SOCK_DGRAM, 0); //发送socket
if (sockfd < 0)
{
wlog(log_die, "%s(%d)[%s], errno %d, %s",__FILE__, __LINE__, __FUNCTION__, errno, strerror(errno));
}
bzero(&toaddr, sizeof(toaddr));
toaddr.sin_family = AF_INET;
toaddr.sin_addr.s_addr = htonl(inet_addr(slave_ip)); //对方ip
toaddr.sin_port = htons(g_rport);
servfd = socket(AF_INET, SOCK_DGRAM, 0); //接收socket
if (servfd < 0)
{
wlog(log_die, "%s(%d)[%s], errno %d, %s",__FILE__, __LINE__, __FUNCTION__, errno, strerror(errno));
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(g_rport);
ret = bind(servfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); //接收socket绑定本地地址对
if (ret == -1)
{
wlog(log_die, "%s(%d)[%s], errno %d, %s",__FILE__, __LINE__, __FUNCTION__, errno, strerror(errno));
}
//get host name;
char hostname[32];
gethostname(hostname, sizeof(hostname));
fd_set rset;
FD_ZERO(&rset);
FD_SET(servfd, &rset);
while(1)
{
snprintf(msg, sizeof(msg), "%s,%d,%d", hostname, server_status, random_num);
ret = sendto(sockfd, msg, strlen(msg), 0,(struct sockaddr *)&toaddr, sizeof(toaddr));
if (ret == -1)
{
wlog(log_info, "errno:%d, %s", errno, strerror(errno));
continue;
}
struct timeval tv;
tv.tv_sec = 1;
tv.tv_usec = 0;
ret = select(1, &rset, NULL, NULL, &tv);
if (ret == -1)
{
wlog(log_die, "errno %d, %s", errno, strerror(errno));
}
else if (FD_ISSET(servfd, &rset))
{
// 省略
}
}
}