C sendto在发送时未给出错误

C sendto在发送时未给出错误,c,linux,sendto,C,Linux,Sendto,你好,我有以下代码: if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) < 0) { perror("socket(UDP): "); return 0; } family = AF_INET; if((remote_server_ent = gethostbyname2(hptr, family)) == NULL ) { perror("gethostbyname2"); return 0; } if (fam

你好,我有以下代码:

if ((fd = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
 {
   perror("socket(UDP): ");
   return 0;
 }

 family = AF_INET;
 if((remote_server_ent = gethostbyname2(hptr, family)) == NULL )
 {
   perror("gethostbyname2");
   return 0;
 }

 if (family == AF_INET)
 {  
   sin = (struct sockaddr_in *) addr;
   sin->sin_family = AF_INET;
   sin->sin_port = htons(server_port);;
   bcopy( (char *)remote_server_ent->h_addr, (char *)&(sin->sin_addr), remote_server_ent->h_length );
   return (sizeof(struct sockaddr_in));
 }

  if (sendto(fd, msg_data_ptr, sizeof(Msg_data_hdr), 0, (struct sockaddr *)&sin, sizeof(struct sockaddr)) != sizeof(Msg_data_hdr))
  {
    fprintf(stderr, "Error in sending data to the server \n");
  }
if((fd=socket(PF_INET,SOCK_DGRAM,0))<0)
{
perror(“套接字(UDP):”;
返回0;
}
家庭=家庭;
if((远程服务器ent=gethostbyname2(hptr,系列))==NULL)
{
perror(“gethostbyname2”);
返回0;
}
if(族==AF_INET)
{  
sin=(结构sockaddr_in*)addr;
sin->sin\u family=AF\u INET;
sin->sin_-port=htons(服务器_-port);;
b复制((字符*)远程服务器->h地址,(字符*)和(sin->sin地址),远程服务器->h地址长度);
返回(sizeof(struct sockaddr_in));
}
如果(发送到(fd,msg_data_ptr,sizeof(msg_data_hdr),0,(struct sockaddr*)和sin,sizeof(struct sockaddr))!=sizeof(msg_data_hdr))
{
fprintf(stderr,“向服务器发送数据时出错”);
}
我的应用程序在端口7000 IP 127.0.0.1上列出。 现在,当我停止应用程序发送数据时,它不会给我错误信息。我总是得到与我正在写入的数据大小相等的写入字节。我如何知道发送是否失败???

是UDP(
SOCK_DGRAM
),因此您可能永远也不会知道。如果您需要可靠性保证,请改用TCP。如果您对仅知道接收方何时完全缺失/不可用的部分解决方案感到满意,请参见此处:

一般的想法是,如果您
connect()
您的UDP套接字,然后在其上接收数据,您可以接收ICMP“destination unreachable”错误(您需要为此使用
select()
epoll()
)。在某些情况下,您会发现您的消息没有发送到另一端……但在其他情况下,您可能不会,因为这是UDP