大侠请留步,socket 怎么非阻塞是读取数据
大侠请留步,急急急!!!socket 怎样非阻塞是读取数据
怎样实现添加个定时器
1、读取到数据立刻返回
2、时间到了没有读取到数据就返回
------解决方案--------------------
select就有这功能啊
------解决方案--------------------
设置超时,recv的时候加上超时时间就可以了。
------解决方案--------------------
参考boost\libs\asio\example\cpp03\timeouts下的例子。
------解决方案--------------------
简单参考下
char reply[max_length];
boost::system::error_code error;
size_t reply_length = sock->read_some(boost::asio::buffer(reply), error);
怎样实现添加个定时器
1、读取到数据立刻返回
2、时间到了没有读取到数据就返回
c++
socket
read_some
定时器
非阻塞
------解决方案--------------------
select就有这功能啊
------解决方案--------------------
设置超时,recv的时候加上超时时间就可以了。
------解决方案--------------------
参考boost\libs\asio\example\cpp03\timeouts下的例子。
------解决方案--------------------
简单参考下
//利用了select函数监听读,写,异常
while (1) {
maxfd = listener;
FD_ZERO(&readset);
FD_ZERO(&writeset);
FD_ZERO(&exset);
FD_SET(listener, &readset);
for (i=0; i < FD_SETSIZE; ++i) {
if (state[i]) {
if (i > maxfd)
maxfd = i;
FD_SET(i, &readset);
if (state[i]->writing) {
FD_SET(i, &writeset);
}
}
}
if (select(maxfd+1, &readset, &writeset, &exset, NULL) < 0) {
perror("select");
return;
}
if (FD_ISSET(listener, &readset)) {
struct sockaddr_storage ss;
socklen_t slen = sizeof(ss);
int fd = accept(listener, (struct sockaddr*)&ss, &slen);
if (fd < 0) {
perror("accept");
} else if (fd > FD_SETSIZE) {
close(fd);
} else {
make_nonblocking(fd);
state[fd] = alloc_fd_state();
assert(state[fd]);/*XXX*/
}
}
for (i=0; i < maxfd+1; ++i) {
int r = 0;
if (i == listener)
continue;
if (FD_ISSET(i, &readset)) {
r = do_read(i, state[i]);