【发布时间】:2013-07-20 03:33:44
【问题描述】:
我想创建一个非阻塞连接。 像这样:
socket.connect(); // returns immediately
为此,我使用了另一个线程,一个无限循环和 Linux epoll。像这样(伪代码):
// in another thread
{
create_non_block_socket();
connect();
epoll_create();
epoll_ctl(); // subscribe socket to all events
while (true)
{
epoll_wait(); // wait a small time(~100 ms)
check_socket(); // check on EPOLLOUT event
}
}
如果我先运行服务器,然后运行客户端,则一切正常。如果我先运行客户端,稍等片刻,运行服务器,然后客户端无法连接。
我做错了什么?也许它可以做得不同?
【问题讨论】:
-
如果你正在提升另一个线程来执行连接,你为什么要异步进行呢?另外,也可以把剩下的通讯录放在那里。
-
好吧,没有epoll和非阻塞怎么办?如果我只是调用 connect() 那么它将阻塞并等待连接(我是对的吗?)。但是如果我想把这个连接线程加入主线程,我不能这样做,因为连接线程会处于阻塞状态。对不起,如果我错了。
-
这不是“异步”。这是非阻塞的。
标签: c linux sockets asynchronous epoll