定时器
定时器在网络编程中应用广泛,服务器通常管理众多定时事件。我们将每个定时事件封装成定时器,使用某种数据结构,比如链表、时间轮,将定时器串联起来,统一管理。
linux提供了三种定时方法:
- socket选项 SO_RCVTIMEO SO_SNDTIMEO
- SIGALRM 信号
- IO 复用的超时参数
socket选项中的定时器
有SO_RECVTIMEO 和SO_SNDTIMEO 分别用来设置socket接收数据超时时间和发送数据超时时间。仅对socket专用的系统调用有效,包括send、sendmsg、recv、recvmsg、accept、connect。
SIGALRM信号
由alarm和setitimer函数设置的闹钟一旦超时,就触发SIGALRM信号,可以利用该信号处理定时任务。
IO复用的超时参数
Linux下的三组IO复用的系统调用中可以设置超时参数,因此可以统一处理信号、IO和定时事件。