Fla*_*ash 3 c sockets select posix network-programming
背景:我知道我不能直接打电话accept(),select()并假设它会起作用,因为客户端可能在select()返回后断开连接,即使select()告诉我套接字已准备就绪accept().相反,我需要设置套接字O_NONBLOCK,然后测试EAGAIN/EWOULDBLOCK我何时调用accept()- 见下文.
问题:我需要用select()/ 做同样的事情recv()吗?如果select()告诉我套接字已准备好读取,我是否可以调用recv()并保证它不会阻塞(或报告EAGAIN/EWOULDBLOCK它是否为非阻塞套接字)?
这是我用于accept()案例的代码:
while(true) {
fd_ready = select_for_read(listen_fds, 2);
fd_client = accept(fd_ready, (struct sockaddr *)&client_addr, &client_addr_len);
if (fd_client == -1) {
if (errno == EAGAIN || errno == EWOULDBLOCK) {
continue;
} else {
exit_with_error("Error accepting connection from client");
}
}
break;
}
Run Code Online (Sandbox Code Playgroud)
(select_for_read获取一个文件描述符和块的数组,直到一个准备好使用select().)
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |