sendto 在发送时没有给出错误
sendto is not giving error on sending
您好,我有以下代码:
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");
}
我的应用程序在端口 7000 IP 127.0.0.1 上列出。
现在当我停止我的应用程序时仍然发送数据,它不会给我错误。我总是让写入的字节等于我正在写入的数据的大小。我怎么知道发送是否失败???
它是 UDP (SOCK_DGRAM
),因此您可能永远不会发现。如果您需要可靠性保证,请改用 TCP。如果您对只知道接收方何时完全 missing/unavailable 的部分解决方案感到满意,请参阅此处:ICMP "destination unreachable" packet on udp connected socket
一般的想法是,如果您 connect()
您的 UDP 套接字然后在其上接收数据,您可能会收到 ICMP "destination unreachable" 错误(您需要使用 select()
或 epoll()
为此)。在某些情况下,您会发现您的消息没有到达另一端...但在其他情况下,您可能不会,因为嘿,它是 UDP。
您好,我有以下代码:
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");
}
我的应用程序在端口 7000 IP 127.0.0.1 上列出。 现在当我停止我的应用程序时仍然发送数据,它不会给我错误。我总是让写入的字节等于我正在写入的数据的大小。我怎么知道发送是否失败???
它是 UDP (SOCK_DGRAM
),因此您可能永远不会发现。如果您需要可靠性保证,请改用 TCP。如果您对只知道接收方何时完全 missing/unavailable 的部分解决方案感到满意,请参阅此处:ICMP "destination unreachable" packet on udp connected socket
一般的想法是,如果您 connect()
您的 UDP 套接字然后在其上接收数据,您可能会收到 ICMP "destination unreachable" 错误(您需要使用 select()
或 epoll()
为此)。在某些情况下,您会发现您的消息没有到达另一端...但在其他情况下,您可能不会,因为嘿,它是 UDP。