socket的工作模式
主页 体系结构,函数简介 简单的C/S模型 socket的工作模式 常见的程序片断 网络应用程序设计 推荐书目 习题

 

阻塞模式

是socket的缺省方式,也是最常用的方式,即函数阻塞直到调用完毕。可参见前面的例子

可能造成阻塞的函数有:connect()、accept()、读写函数、select()、poll()、gethostbyname()等。

 

非阻塞模式

程序调用可能造成阻塞的函数时,如果会发生阻塞,这些函数返回-1并将errno设置为EAGAIN或EWOULDBLOCK,程序可继续向下运行。可能阻塞的函数对应的任务完成,则再次调用该函数时就返回0表示运行结束。

非阻塞模式可以避免程序死锁,但是需要程序不断检查各个可能阻塞的函数的状态,当一个应用程序使用了非阻塞模式的套接字,它需要使用一个循环来不听的测试是否一个文件描述符有数据可读(称做polling)。应用程序不停的polling内核来检查是否I/O操作已经就绪。这将是一个极浪费CPU资源的操作,因此不能实际应用。一般非阻塞模式是与同步I/O模式共同使用的。

进入非阻塞模式的方法,请参见函数说明

 

I/O多路复用(同步I/O模式)

使用select()、poll()等函数实现对多个socket的同步I/O操作。它能同时等待多个socket描述符,而这些socket描述符其中的任意一个进入读就绪/写就绪/出错状态,select()函数就可以返回。请参见函数说明程序

 

信号驱动I/O

 

 

异步I/O