非阻塞式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提供”
- 上一篇:一个通用Makefile的编写
《非阻塞式socket编程select()》相关文章
- › 非阻塞式socket编程select()
- 在百度中搜索相关文章:非阻塞式socket编程select()
- 在谷歌中搜索相关文章:非阻塞式socket编程select()
- 在soso中搜索相关文章:非阻塞式socket编程select()
- 在搜狗中搜索相关文章:非阻塞式socket编程select()