in net/rsocket/rsocket.cpp [202:227]
RSockFD accept(uint64_t timeout, photon::net::EndPoint* remote_endpoint,
Func&& interrupt) {
sockaddr_storage addr;
socklen_t socklen = sizeof(addr.store);
Timeout tmo(timeout);
int ret;
do {
ret = raccept(fd, (sockaddr*)&addr.store, &socklen);
if (ret < 0) {
if (errno == EWOULDBLOCK || errno == EAGAIN) {
if (interrupt()) {
errno = EINTR;
break;
}
photon::thread_yield();
} else {
break;
}
}
} while (ret < 0 && tmo.timeout());
if (ret < 0) return RSockFD(-1);
if (remote_endpoint) {
*remote_endpoint = addr.to_endpoint();
}
return RSockFD(ret);
}