linux下select编程librtspserver.rar

linux下select编程我们知道select是IO多路复用的一个最简单支持,poll和epoll是select的升级版。在UNIX网络编程第五章读书笔记我们遇到这样一个问题:当客户端阻塞在fgets()等待客户输入的时候,服务器端断开连接。而客户端却不能及时知道,只有在客户输入完毕并发送到服务器的时候才知道连接已经断开,但是此时可能已经过了很长时间了。如果我们想及时知道服务器断开连接怎么办呢?我们知道不管是fgets()等待客户输入还是read()从套接口读取数据,都是IO操作。我们不能阻塞在某个IO操作中一个,这样其他IO操作会无法进行,即使其他IO操作上有数据了我们也无法及时读取。select的原理是这样的:我们将这些IO操作所要操作的文件描述符放到一起(比如一个数组中),然后阻塞在select()函数上,为什么要阻塞在这里呢?其实这时的select实在不停的遍历这个数组,查看其中的文件描述符上是否可读/可写,一旦可读/可写,select返回,停止阻塞。然后我们对可读/可写的文件描述如做相应的操作即可。下面是select函数的原型:   int select(nfds, readfds, writefds, exceptfds, timeout)   nfds是指定select()要遍历的最大文件描述符+ 1,readfds就是放文件描述的数组,这个数组里面关心的是该数组中文件描述符的读事件,wretefds也是放文件描述符的数组,这个数组里面关心的是该数组中文件描述符的写事件,exceptfds也是放文件描述符的数组,这个数组关心的是该数组中文件描述符的出错事件。timeout是select阻塞的时间。如果设置为空指针,那么将永远阻塞下去直到某个描述符有事件发生(就绪)。否则的话就会在阻塞由timeout指定的时间后返回,无论关心的文件描述符是否有事件发生。select返回有事件发生的文件描述符个数,失败返回-1,超时返回0!
rar
librtspserver.rar 预估大小:40个文件
folder
librtspserver 文件夹
file
UnitTest_rtspRtp.c 8KB
file
Makefile-NT 602B
file
UnitTest_rtspServer.h 6KB
file
UnitTest_rtspParser.c 13KB
file
UnitTest_rtspParser.h 1KB
file
UnitTest_rtspUser.h 1KB
file
Makefile-hi3559a 474B
file
UnitTest_rtspList.h 22KB
file
UnitTest_rtspUser.c 6KB
file
Makefile-hi3516av200 466B
file
UnitTest_rtspUtil.c 8KB
file
rtspServer.h 4KB
file
UnitTest_rtspCmd.c 23KB
file
UnitTest_rtspUtil.h 2KB
file
Makefile 474B
folder
.svn 文件夹
folder
pristine 文件夹
folder
1e 文件夹
file
1e1c5ba6dcdcaf6f7942587e29b2673e0dccd27c.svn-base 1KB
folder
0b 文件夹
file
0b9d1788b80c939d8d3818fd04610a3fcf57c1ac.svn-base 26KB
folder
d5 文件夹
file
d5c35e7dde1eff77df4f3753e6a3375ea8f57ce5.svn-base 474B
folder
be 文件夹
file
be56c998b78181753c96d1573860c8f25e4c2459.svn-base 63B
folder
1a 文件夹
file
1ae00a1efa30aa8560b07d0a4e082f1e36df0cff.svn-base 13KB
folder
5d 文件夹
file
5dd98bab073f62076d407db74803c30daf8334b0.svn-base 4KB
folder
c5 文件夹
file
c5a906425cbf01957e6979d89c83bfd0931e6bdb.svn-base 8KB
folder
10 文件夹
file
10bb974ba0d9d7aeace63f918ae2309cc9a9a235.svn-base 6KB
folder
dd 文件夹
file
dd4fd9af26c8317793a4d3867464ad959abc490b.svn-base 602B
folder
f6 文件夹
file
f6c593871ed26cadc0b63ac9c029a65bc9acc658.svn-base 2KB
folder
cb 文件夹
file
cb7ebeb7211d93df0e5e47f8f541cbfb6e35b314.svn-base 22KB
folder
63 文件夹
file
630f6aeaf756e1b2857d1e990ff418c844742d89.svn-base 6KB
folder
49 文件夹
file
4940a91b2dc4902dacb9aaf1eac7978df1d2d6de.svn-base 8KB
folder
0d 文件夹
file
0d4f6263f2e4414778946da5c695559954d895f5.svn-base 1KB
folder
26 文件夹
file
26d2ce83d71e204e34447e9a9c8912698ba9f059.svn-base 2KB
folder
7b 文件夹
file
7b62ff131620f5b44af84c397e50e1bcee65103c.svn-base 23KB
folder
02 文件夹
file
0224a2ce759fb4a30d96d0c763c4f80d4e4b9e09.svn-base 466B
folder
b8 文件夹
file
b83b35842cba9af9685dff65122c81e21a1a3cc4.svn-base 1KB
file
wc.db 44KB
folder
tmp 文件夹
file
entries 3B
file
format 3B
file
UnitTest_rtspCmd.h 2KB
file
UnitTest_rtspServer.c 26KB
file
UnitTest_rtspRtp.h 1KB
file
readme.txt 63B
rar 文件大小:68.04KB