当前位置: 技术问答>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模式!