Fix http_request
parent
d11e8dcb5e
commit
edf6d6f897
2
osd.cpp
2
osd.cpp
|
@ -276,7 +276,7 @@ restart:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
auto & cb = epoll_handlers[events[i].data.fd];
|
auto & cb = epoll_handlers[events[i].data.fd];
|
||||||
cb(events[i].events, events[i].data.fd);
|
cb(events[i].data.fd, events[i].events);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -80,6 +80,7 @@ void http_co_t::resume()
|
||||||
int r;
|
int r;
|
||||||
if ((r = inet_pton(AF_INET, host.c_str(), &addr.sin_addr)) != 1)
|
if ((r = inet_pton(AF_INET, host.c_str(), &addr.sin_addr)) != 1)
|
||||||
{
|
{
|
||||||
|
code = ENXIO;
|
||||||
delete this;
|
delete this;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -88,6 +89,7 @@ void http_co_t::resume()
|
||||||
peer_fd = socket(AF_INET, SOCK_STREAM, 0);
|
peer_fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
if (peer_fd < 0)
|
if (peer_fd < 0)
|
||||||
{
|
{
|
||||||
|
code = errno;
|
||||||
delete this;
|
delete this;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -95,6 +97,7 @@ void http_co_t::resume()
|
||||||
r = connect(peer_fd, (sockaddr*)&addr, sizeof(addr));
|
r = connect(peer_fd, (sockaddr*)&addr, sizeof(addr));
|
||||||
if (r < 0 && errno != EINPROGRESS)
|
if (r < 0 && errno != EINPROGRESS)
|
||||||
{
|
{
|
||||||
|
code = errno;
|
||||||
delete this;
|
delete this;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -105,14 +108,17 @@ void http_co_t::resume()
|
||||||
ev.events = EPOLLOUT | EPOLLIN | EPOLLRDHUP | EPOLLET;
|
ev.events = EPOLLOUT | EPOLLIN | EPOLLRDHUP | EPOLLET;
|
||||||
if (epoll_ctl(osd->epoll_fd, EPOLL_CTL_ADD, peer_fd, &ev) < 0)
|
if (epoll_ctl(osd->epoll_fd, EPOLL_CTL_ADD, peer_fd, &ev) < 0)
|
||||||
{
|
{
|
||||||
throw std::runtime_error(std::string("epoll_ctl: ") + strerror(errno));
|
code = errno;
|
||||||
|
delete this;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
epoll_events = 0;
|
||||||
st = 1;
|
st = 1;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (st == 1)
|
if (st == 1)
|
||||||
{
|
{
|
||||||
if (epoll_events & EPOLLOUT)
|
if (epoll_events & (EPOLLOUT | EPOLLERR))
|
||||||
{
|
{
|
||||||
int result = 0;
|
int result = 0;
|
||||||
socklen_t result_len = sizeof(result);
|
socklen_t result_len = sizeof(result);
|
||||||
|
@ -122,6 +128,7 @@ void http_co_t::resume()
|
||||||
}
|
}
|
||||||
if (result != 0)
|
if (result != 0)
|
||||||
{
|
{
|
||||||
|
code = result;
|
||||||
delete this;
|
delete this;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -133,7 +140,9 @@ void http_co_t::resume()
|
||||||
ev.events = EPOLLIN | EPOLLRDHUP | EPOLLET;
|
ev.events = EPOLLIN | EPOLLRDHUP | EPOLLET;
|
||||||
if (epoll_ctl(osd->epoll_fd, EPOLL_CTL_MOD, peer_fd, &ev) < 0)
|
if (epoll_ctl(osd->epoll_fd, EPOLL_CTL_MOD, peer_fd, &ev) < 0)
|
||||||
{
|
{
|
||||||
throw std::runtime_error(std::string("epoll_ctl: ") + strerror(errno));
|
code = errno;
|
||||||
|
delete this;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
st = 2;
|
st = 2;
|
||||||
epoll_events = 0;
|
epoll_events = 0;
|
||||||
|
@ -192,7 +201,12 @@ void http_co_t::resume()
|
||||||
// Read response
|
// Read response
|
||||||
if (st == 5)
|
if (st == 5)
|
||||||
{
|
{
|
||||||
if (epoll_events & EPOLLIN)
|
if (epoll_events & (EPOLLRDHUP|EPOLLERR))
|
||||||
|
{
|
||||||
|
delete this;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (epoll_events & EPOLLIN)
|
||||||
{
|
{
|
||||||
response.resize(received + 9000);
|
response.resize(received + 9000);
|
||||||
io_uring_sqe *sqe = osd->ringloop->get_sqe();
|
io_uring_sqe *sqe = osd->ringloop->get_sqe();
|
||||||
|
@ -212,11 +226,6 @@ void http_co_t::resume()
|
||||||
st = 6;
|
st = 6;
|
||||||
epoll_events = 0;
|
epoll_events = 0;
|
||||||
}
|
}
|
||||||
else if (epoll_events & EPOLLRDHUP)
|
|
||||||
{
|
|
||||||
delete this;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (st == 6)
|
if (st == 6)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue