超时时间,先判断当前套接字模式,非阻塞式套接字超时时间为0,阻塞式套接字读取对应的超时字段取值。当我们通过setsocketopt设置SO_SNDTIMEO/SO_RCVTIMEO选项时,其实就是给套接字的发送/接收超时字段进行赋值,没有设置的话默认无限大,也就是一直等下去。
send/recv函数执行时,判断发送/接收超时字段为0,则认为当前为非阻塞式模式,非0认为是阻塞式。若此时资源没有准备好,对于非阻塞式套接字,函数将直接返回,并设置errno,对于阻塞式套接字,进程将挂起直到发生了IO事件或者超时时间到。
文章讲述了套接字在发送(SO_SNDTIMEO)和接收(SO_RCVTIMEO)时的超时设置。非阻塞式套接字超时时间为0,而阻塞式套接字会依据设定的超时值等待。send/recv函数会根据超时字段判断操作模式,未准备好资源时,非阻塞式立即返回并设置errno,阻塞式则会挂起直至超时或IO事件发生。
747

被折叠的 条评论
为什么被折叠?



