while ((len = read(fd, buf, sizeof(buf))) > 0) {
int ret = write(connect_fd, buf, len);
if(ret == -1 && errno == EAGAIN) {
printf("缓冲区满了...
");
}
}
在边沿模式下,我设置了connect_fd通信用套接字为非阻塞,但是在循环写数据时会发生缓冲区满的情况,我试图使用epoll_wait等待该套接字可写事件发生,但因为在套接字可读事件产生时已经做出回复,所以在这里会阻塞在epoll_wait上。
while(1) {
printf("epoll_wait...
");
int n = epoll_wait(epfd, events, 1024, -1);
printf("阻塞了?
");
int flag = 0;
for(int i = 0; i < n; ++i) {
if(events[i].data.fd == connect_fd && events[i].events & EPOLLOUT) {
len = read(fd, buf, sizeof(buf));
if(len == 0) {
flag = 1;
}
write(connect_fd, buf, len);
break;
}
}
if(flag == 1) {
break;
}
}
请问这种情况我应该如何处理?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…