提问人:Ahsan Sadeeb 提问时间:7/28/2022 更新时间:7/28/2022 访问量:59
epoll 和多次连接尝试有什么区别?
What is the difference between epoll and multiple connect attempt?
问:
假设我有一个非阻塞 TCP 客户端套接字。我想连接到 TCP 服务器。我发现可以使用以下任何一种方式来做到这一点。
int num_of_retry=5;
for(int i=0;i<num_of_retry;i++){
connect(SOCKET_FD,...);
sleep(1000ms);
}
和这个
connect(SOCKET_FD,...);
epoll_wait(...,5000ms)
上述两种方法的主要区别是什么,性能和其他方法?
答:
2赞
Remy Lebeau
7/28/2022
#1
在此特定示例中,主要区别在于,在经过完整间隔之前不会退出,而如果挂起的连接操作在完整间隔结束之前完成,则(并且)也会更早退出。sleep()
epoll()
select()
否则,这两个示例都会阻塞调用线程,直到发生某些事情(这有点违背了使用非阻塞套接字的目的 - 除了此方法是使用 )实现超时的唯一方法。connect()
请注意,在任一示例中,如果在套接字已经在连接时调用套接字,则将失败并显示错误。如果连接操作超时,则应在再次调用之前使用套接字并创建一个新套接字。你应该等待(或)告诉你操作何时完成,不要只是调用一个循环,直到它报告除 .connect()
connect()
EALREADY
close()
connect()
epoll()
select()
connect()
EALREADY
评论
epoll()