高级I/O函数
时间:2009-04-16 来源:ddvv
对于socket,最基本的输入输出函数就是,read和write。它们最基本,同样功能也是最少的。Unix中有几个函数是read/write的变种,在基本的输入输出功能上,还增加了一些非常使用的功能和特性,它们是:recv/send、readv/writev和recvmsg/sendmsg。
1、socket超时的实现
一般来说,要在对socket的I/O操作实现超时,有3种方式:
·注册SIGALRM信号的处理函数,然后调用alrm,则若对socket的I/O操作阻塞时间大于alrm注册的时间,则在alrm时间到时会阻塞会被SIGALRM打断。这样做有个缺点,就是alrm的调用会影响到同一进程的其他alrm调用。某些系统中,系统调用被信号打断后,会自动重新调用,在这种系统中可以使用setlongjmp/siglongjmp来跳出。
·使用SO_RCVTIMEO/SO_SNDTIMEO选项。注意,并不是所有的系统都支持这两个选项。
·用select代替read/write。
前面两种方式只对socket进行输入/输出有效,而最后一种除了输入/输出以外,还对connect有效(socket必须处于nonblocking模式下)。
2、recv/send
函数原型:
|
|
|
|
|
|
|
相关阅读 更多 +
排行榜 更多 +
|