非阻塞式socket编程select()

[09-12 18:29:19]   来源:http://www.88dzw.com  EDA/PLD   阅读:8511

文章摘要:返回值:负值:select错误 正值:某些文件可读写或出错 0:等待超时,没有可读写或错误的文件在有了select后可以写出像样的网络程序来!举个简单的例子,就是从网络上接受数据写入一个文件中。例子:main() {int sock;FILE *fp;struct fd_set fds;struct timeval timeout={3,0}; //select等待3秒,3秒轮询,要非阻塞就置0char buffer[256]={0}; //256字节的接收缓冲区/* 假定已经建立UDP连接,具体过程不写,简单,当然TCP也同理,主机ip和port都已经给定,要写的文件已经打开sock=soc

非阻塞式socket编程select(),标签:eda技术,eda技术实用教程,http://www.88dzw.com

  返回值:

  负值:select错误 正值:某些文件可读写或出错 0:等待超时,没有可读写或错误的文件

  在有了select后可以写出像样的网络程序来!举个简单的例子,就是从网络上接受数据写入一个文件中。

  例子:

  main() {

  int sock;

  FILE *fp;

  struct fd_set fds;

  struct timeval timeout={3,0}; //select等待3秒,3秒轮询,要非阻塞就置0

  char buffer[256]={0}; //256字节的接收缓冲区

  /* 假定已经建立UDP连接,具体过程不写,简单,当然TCP也同理,主机ip和port都已经给定,要写的文件已经打开

  sock=socket(...);

  bind(...);

  fp=fopen(...); */

  while(1) {

  FD_ZERO(&fds); //每次循环都要清空集合,否则不能检测描述符变化

  FD_SET(sock,&fds); //添加描述符

  FD_SET(fp,&fds); //同上

  maxfdp=sock>fp?sock+1:fp+1; //描述符最大值加1

  switch(select(maxfdp,&fds,&fds,NULL,&timeout)) //select使用 {

  case -1: exit(-1);break; //select错误,退出程序

  case 0:break; //再次轮询

  default:

  if(FD_ISSET(sock,&fds)) //测试sock是否可读,即是否网络上有数据 {

  recvfrom(sock,buffer,256,.....);//接受网络数据

  if(FD_ISSET(fp,&fds)) //测试文件是否可写

  fwrite(fp,buffer...);//写入文件

  buffer清空;

  }// end if break;

  }// end switch

  }//end while

  }//end main

  “www.88dzw.com提供”


上一页  [1] [2] [3] 


Tag:EDA/PLDeda技术,eda技术实用教程EDA/PLD

《非阻塞式socket编程select()》相关文章

分类导航
最新更新
热门排行