当前位置: 技术问答>linux和unix
求救:如何用select解决recv的阻塞问题
来源: 互联网 发布时间:2015-09-27
本文导语: 当一个文件接收完毕后如何使recv不阻塞呢? | 引入超时函数,代码如下 * Waits for a file descriptor to change status or unblocked signal * @paramfdfile descriptor * @paramtimeoutseconds to wait before timing...
当一个文件接收完毕后如何使recv不阻塞呢?
|
引入超时函数,代码如下
* Waits for a file descriptor to change status or unblocked signal
* @paramfdfile descriptor
* @paramtimeoutseconds to wait before timing out or 0 for no timeout
* @return1 if descriptor changed status or 0 if timed out or -1 on error
*/
int
waitfor(int fd, int timeout)
{
fd_set rfds;
struct timeval tv = { timeout, 0 };
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
return select(fd + 1, &rfds, NULL, NULL, (timeout > 0) ? &tv : NULL);
}
* Waits for a file descriptor to change status or unblocked signal
* @paramfdfile descriptor
* @paramtimeoutseconds to wait before timing out or 0 for no timeout
* @return1 if descriptor changed status or 0 if timed out or -1 on error
*/
int
waitfor(int fd, int timeout)
{
fd_set rfds;
struct timeval tv = { timeout, 0 };
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
return select(fd + 1, &rfds, NULL, NULL, (timeout > 0) ? &tv : NULL);
}
|
fcntl(fileno(stream), F_SETFL, flags | O_NONBLOCK);
设置为NONBLOCK模式!
设置为NONBLOCK模式!
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。