Ich benutze nicht blockierende Buchse, um neue Verbindung zu erhalten. Aber der Code schlägt wiederholt auf accept()
fehl.socket :: akzeptieren kontinuierlich zu EGAIN
int sockfd = ::socket(family, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, IPPROTO_TCP);
::bind(sockfd, bind_addr, static_cast<socklen_t>(sizeof(struct sockaddr_in6)));
ret = ::listen(sockfd, SOMAXCONN);
while (True) {
::poll(&*pollfds_.begin(), pollfds_.size(), timeoutMs);
struct sockaddr_in6 addr;
bzero(&addr, sizeof addr);
socklen_t addrlen = static_cast<socklen_t>(sizeof *addr);
int connfd = ::accept4(sockfd, sockaddr_cast(addr),
&addrlen, SOCK_NONBLOCK | SOCK_CLOEXEC);
}
errno
ist EAGAIN
.
Sie definieren 'connfd' zweimal, können Sie eine [MCVE]? – purplepsycho
Verwenden Sie ipv6 ('sockaddr_in6') oder ipv4 (' :: accept4')? – purplepsycho
@purplepsycho Ich kopiere eine weitere Zeile von meinem Projekt. – Sam