sendto成功返回

❤️强烈推荐人工智能学习网站❤️                 

 sendto用于UDP发送数据,send用于TCP发送数据.我们知道TCP中的send成功返回表示应用进程已成功将数据写入发送缓冲区,不表示数据已成功到达对端。而对于sendto成功返回,也只是表明接口输出队列中具有存放所形成IP数据包的空间,UDP是没有发送缓冲区的。来看一段代码:

#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <errno.h>
#include <malloc.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <stdarg.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <signal.h>
#define MAXLINE 4096



int main()
{
   int i;
   int sockfd;
   struct sockaddr_in seraddr;

   sockfd=socket(AF_INET,SOCK_DGRAM,0);


   bzero(&seraddr,sizeof(seraddr));
   seraddr.sin_family=AF_INET;
   seraddr.sin_addr.s_addr=inet_addr("127.0.0.1");
   seraddr.sin_port=htons(8888);


   char buf[100]="11111111111";
   i=sendto(sockfd,buf,sizeof(buf)+1,0,(sockaddr *)&seraddr,sizeof(sockaddr));
   printf("i=%d\n",i);

   getchar();
   exit(0);
}

 

这是一段基于UDP的客户端的代码,编译并运行,此时并没有运行相应的服务端。此时sendto也成功返回了,如下:

 

[mapan@localhost UDP]$ ./client 
i=101

这里显然sendto是发送错的,但没有返回错误。unix网络编程中有一句话:未连接的UDP套接字不会收到任何异步错误。

 

 

 

 

上一篇:网络坐标纠偏心得分享


下一篇:002-CORDIC实现幅度相位求解