pfd.fd = sock;
pfd.events = POLLIN;
r = poll(&pfd, 1, timeout);
- if (r == 1 && pfd.revents & (POLLIN | POLLERR | POLLHUP)) {
- /* In case of POLLERR or POLLHUP we let accept() catch the error! */
- struct sockaddr_storage addr;
- struct sockaddr *paddr = (struct sockaddr *)&addr;
- socklen_t addrlen = sizeof addr;
- r = accept(sock, paddr, &addrlen);
- if (r < 0) {
+ if (r == 1) {
+ if (pfd.revents & (POLLIN | POLLERR | POLLHUP)) {
+ /* In case of POLLERR or POLLHUP we let accept() catch the error! */
+ struct sockaddr_storage addr;
+ struct sockaddr *paddr = (struct sockaddr *)&addr;
+ socklen_t addrlen = sizeof addr;
+ r = accept(sock, paddr, &addrlen);
+ if (r < 0) {
+ r = EAI_SYSTEM;
+ }
+ else {
+ ADDR2STR(paddr, addrlen, stra, 100);
+ NETLOG_DBG("accept(%d) -> (%d, %s): Ok", sock, r, stra);
+ }
+ }
+ else if (pfd.revents & POLLNVAL) {
+ errno = EBADF;
r = EAI_SYSTEM;
}
else {
- ADDR2STR(paddr, addrlen, stra, 100);
- NETLOG_DBG("accept(%d) -> (%d, %s): Ok", sock, r, stra);
+ NETLOG_DBG("This should never happen! (r=%d, revents=0x%04X)",
+ r, (unsigned)pfd.revents);
+ errno = EIO;
+ r = EAI_SYSTEM;
}
}
else if (r == 0) {
else if (r < 0) {
r = EAI_SYSTEM;
}
- else if (pfd.revents & POLLNVAL) {
- errno = EBADF;
- r = EAI_SYSTEM;
- }
- else {
- NETLOG_DBG("This should never happen! (r=%d, revents=0x%04X)",
- r, (unsigned)pfd.revents);
- errno = EIO;
- r = EAI_SYSTEM;
- }
if (r < 0) {
NETLOG_ERR(r, "tcp_accept(%d)", sock);
}
pfd.fd = fd;
pfd.events = POLLIN;
r = poll(&pfd, 1, timeout);
- if (r == 1 && pfd.revents & (POLLIN | POLLERR | POLLHUP)) {
- /* In case of POLLERR or POLLHUP we let recv() catch the error! */
- r = recvfrom(fd, buf, len, flags | MSG_DONTWAIT, addr, alen);
- if (r < 0 && errno == ENOTSOCK) {
- NETLOG_DBG("recvfrom_tm(%d): not a socket, trying read()", fd);
- r = read(fd, buf, len);
- if (r >= 0 && alen != NULL)
- *alen = 0;
+ if (r == 1) {
+ if (pfd.revents & (POLLIN | POLLERR | POLLHUP)) {
+ /* In case of POLLERR or POLLHUP we let recv() catch the error! */
+ r = recvfrom(fd, buf, len, flags | MSG_DONTWAIT, addr, alen);
+ if (r < 0 && errno == ENOTSOCK) {
+ NETLOG_DBG("recvfrom_tm(%d): not a socket, trying read()", fd);
+ r = read(fd, buf, len);
+ if (r >= 0 && alen != NULL)
+ *alen = 0;
+ }
+ r = r < 0 ? EAI_SYSTEM : r;
+ }
+ else if (pfd.revents & POLLNVAL) {
+ errno = EBADF;
+ r = EAI_SYSTEM;
+ }
+ else {
+ NETLOG_DBG("This should never happen! (r=%zd, revents=0x%04X)",
+ r, (unsigned)pfd.revents);
+ errno = EIO;
+ r = EAI_SYSTEM;
}
- r = r < 0 ? EAI_SYSTEM : r;
}
else if (r == 0) {
errno = ETIME;
else if (r < 0) {
r = EAI_SYSTEM;
}
- else if (pfd.revents & POLLNVAL) {
- errno = EBADF;
- r = EAI_SYSTEM;
- }
- else {
- NETLOG_DBG("This should never happen! (r=%zd, revents=0x%04X)",
- r, (unsigned)pfd.revents);
- errno = EIO;
- r = EAI_SYSTEM;
- }
if (r < 0) {
NETLOG_ERR(r, "recv_tm(%d)", fd);
}
pfd.fd = fd;
pfd.events = POLLOUT;
r = poll(&pfd, 1, timeout);
- if (r == 1 && pfd.revents & (POLLOUT | POLLERR | POLLHUP)) {
- /* In case of POLLERR or POLLHUP we let send() catch the error! */
- r = sendto(fd, buf, len, flags | MSG_DONTWAIT | MSG_NOSIGNAL, addr, alen);
- if (r < 0 && errno == ENOTSOCK) {
- NETLOG_DBG("sendto_tm(%d): not a socket, trying write()", fd);
- r = write(fd, buf, len);
+ if (r == 1) {
+ if (pfd.revents & (POLLOUT | POLLERR | POLLHUP)) {
+ /* In case of POLLERR or POLLHUP we let send() catch the error! */
+ r = sendto(fd, buf, len, flags | MSG_DONTWAIT | MSG_NOSIGNAL, addr, alen);
+ if (r < 0 && errno == ENOTSOCK) {
+ NETLOG_DBG("sendto_tm(%d): not a socket, trying write()", fd);
+ r = write(fd, buf, len);
+ }
+ r = r < 0 ? EAI_SYSTEM : r;
+ }
+ else if (pfd.revents & POLLNVAL) {
+ errno = EBADF;
+ r = EAI_SYSTEM;
+ }
+ else {
+ NETLOG_DBG("This should never happen! (r=%zd, revents=0x%04X)",
+ r, (unsigned)pfd.revents);
+ errno = EIO;
+ r = EAI_SYSTEM;
}
- r = r < 0 ? EAI_SYSTEM : r;
}
else if (r == 0) {
errno = ETIME;
else if (r < 0) {
r = EAI_SYSTEM;
}
- else if (pfd.revents & POLLNVAL) {
- errno = EBADF;
- r = EAI_SYSTEM;
- }
- else {
- NETLOG_DBG("This should never happen! (r=%zd, revents=0x%04X)",
- r, (unsigned)pfd.revents);
- errno = EIO;
- r = EAI_SYSTEM;
- }
if (r < 0) {
NETLOG_ERR(r, "send_tm(%d)", fd);
}