1、recv阻塞后不消耗资源,主要问题是阻塞后就不能干别的事情了,只能等待2、select的轮询是有时间间隔的,把recv放入死循环则一直轮询根本不释放cpu3、select一般用于多连接情况,比如在tcp上的监听socket,一旦有连接到到就起一个线程去调用accept并由该线程处理此连接。 有用1 回复 查看全部 1 个回答 推荐问题 求救...
//设置fd为阻塞或者非阻塞 void activate_nonblock(int fd); void deactivate_nonblock(int fd); //超时IO函数 int read_timeout(int fd, unsigned int wait_seconds); int write_timeout(int fd, unsigned int wait_seconds); int accept_timeout(int fd, struct sockaddr_in *addr, unsigned int wait_s...
}/*activate_nonblock - 设置IO为非阻塞模式 * fd: 文件描述符*/voidactivate_nonblock(intfd) {intret;intflags =fcntl(fd, F_GETFL);if(flags == -1) ERR_EXIT("fcntl error"); flags|=O_NONBLOCK; ret=fcntl(fd, F_SETFL, flags);if(ret == -1) ERR_EXIT("fcntl error"); }/*deactivate_...
/* deactivate_nonblock - 设置IO为阻塞模式 * fd: 文件描述符 */ void deactivate_nonblock( int fd) { int ret; int flags = fcntl(fd, F_GETFL); if (flags == - 1 ) ERR_EXIT( "fcntl error" ); flags &= ~O_NONBLOCK; ret = fcntl(fd, F_SETFL, flags); if (ret ...
1、recv阻塞后不消耗资源,主要问题是阻塞后就不能干别的事情了,只能等待2、select的轮询是有时间间隔的,把recv放入死循环则一直轮询根本不释放cpu3、select一般用于多连接情况,比如在tcp上的监听socket,一旦有连接到到就起一个线程去调用accept并由该线程处理此连接。
*/voidactivate_nonblock(intfd){intret;intflags=fcntl(fd,F_GETFL);if(flags==-1)ERR_EXIT("fcntl error");flags|=O_NONBLOCK;ret=fcntl(fd,F_SETFL,flags);if(ret==-1)ERR_EXIT("fcntl error");}/* deactivate_nonblock - 设置IO为阻塞模式 ...
ret = accept(fd, (structsockaddr *)addr, &addrlen); else ret = accept(fd,NULL,NULL); if(ret == -1) ERR_EXIT("accpet error"); returnret; } /* activate_nonblock - 设置IO为非阻塞模式 * fd: 文件描述符 */ voidactivate_nonblock(intfd) { intret;...
*/voidactivate_nonblock(intfd){intret;intflags=fcntl(fd,F_GETFL);if(flags==-1)ERR_EXIT("fcntl error");flags|=O_NONBLOCK;ret=fcntl(fd,F_SETFL,flags);if(ret==-1)ERR_EXIT("fcntl error");}/* deactivate_nonblock - 设置IO为阻塞模式 ...
/* deactivate_nonblock - 设置IO为阻塞模式 * fd: 文件描述符 */ void deactivate_nonblock( int fd) { int ret; int flags = fcntl(fd, F_GETFL); if (flags == - 1) ERR_EXIT( "fcntl error"); flags &= ~O_NONBLOCK; ret = fcntl(fd, F_SETFL, flags); ...