易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux下select的使用小记

今天使用select编程,问题很多,以前真的没有仔细研究过。
出现了以下几个问题
1 recvfrom在接收时,提供给系统调用的最后一个参数,客户端的地址结构,其长度必须进行初始化,如果为0,则不能接收数据。
2 select的第一个参数为所有监视的文件描述符的最大值+1,而不是监视的文件描述符个数+1。
3 不要监视那些经常可用的文件描述符,如果这样做,select会一直返回。
4 在select返回后,如果监视的文件描述符没有状态改变,则在fd_set中此文件描述符会被清0,因此在select的循环中,每次进入都要重新设置我们所关注的文件描述符。
5 如果select使用了超时操作,每次返回select都会修改计时器,将计时器设为余下的时间,因此如果使用了计时器,每次进入循环都要重置计时器。pselect没有这个毛病。
下面是linux下的基于select的一个UDP反射服务器的示例代码:
 #include <sys/select.h>
#include <sys/types.h>
#include <sys/time.h>
#include <unistd.h>
#include <stdio.h>
#include <error.h>
#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <assert.h>
int
main()
{
int sockfd = socket(AF_INET,SOCK_DGRAM,0);
assert(sockfd>0);

struct sockaddr_in local;
local.sin_family = AF_INET;
local.sin_port = htons(8000);
local.sin_addr.s_addr = INADDR_ANY;
int err = bind(sockfd,(struct sockaddr*)&local,sizeof(local));
assert(err==0);
fd_set sets[3];
for(int i=0;i<3;i++)
{
FD_ZERO(&sets[i]);
}

timeval tv;
char buf[1024];
while(1)
{

FD_SET(sockfd,&sets[0]);

//register
tv.tv_sec = 1;
//monitor and handle
int nfds = select(sockfd+1,&sets[0],&sets[1],&sets[2],&tv);
if(nfds<0)
{
perror("select");
exit(-1);
}
printf("evnet num = %d\n",nfds);
//handle
for(int i=0;i<nfds;i++)
{
struct sockaddr_in remo


相关文档:

Linux下使用Qt编程中文乱码的解决


在QT中可以直接使用QTextCodec来转换字符串的编码。
例如,我们想在程序中使用中文,类似tr(“喂,你好吗?”)。我们要在main函数中增加以下几条语句,重新设置一下默认的编码器。
先调用下面两个函数之一
QTextCodec *codec=QTextCodec::codecForName(”gbk”);
QTextCodec *codec=QTextCodec ......

linux socket开发基础


 
 
  这是关于如何用各种可以得到的接口为Linux开发网络程序的系列文章的第一篇。就像大多数Unix-based的操作系统一样,Linux支持将TCP/IP作为本地的网络传输协议。在这个系列中,我们假定你已经比较熟悉Linux上的C编程和Linux的一些系统知识诸如signals,forking等等。
  这篇文章是关于如何用BSD套接� ......

嵌入式Linux环境下MiniGUI的研究与移植


 作者:小野狼
--  发布时间:2009-8-31 16:31:10
--  嵌入式Linux环境下MiniGUI的研究与移植
 前言
 近年来随着嵌入式设备与市场需求的广泛结合,手机、PDA、DVD播放机等产品的应用对可视化操作界面的简洁和方便提出了更高的要求,这都需要一个稳定可靠的高性能GUI系统来提供支持。图形� ......

红帽携手华清远见共建国内Linux开发人才培养标准

 
来源:华清远见嵌入式学院    
红帽公司大中华区培训服务总监黄建耀与华清远见教育集团总裁季久峰共同庆贺合作成功
2010年5月18日,华清远见教育集团与红帽大中华区关于Linux开发人才培养的合作签约仪式在北京世纪财富中心红帽公司总部正式举行,红帽大中华区培训服务总监黄建耀、华清远见� ......

Linux Makefile介绍使用的环境深入浅出

Linux Makefile已被广泛应用但是也在不断的更新,这里介绍Linux Makefile安装设置使用,帮助大家安装更新Linux Makefile系统。作为Linux下的程序开发人员,大家一定都遇到过Linux Makefile,用make命令来编译自己写的程序确实是很方便。一般情况下,大家都是手工写一个简单Linux Makefile,如果要想写出一个符合自由软件惯� ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号