什么是异步套接字?它们与普通套接字有什么不同(阻塞和非阻塞)?
该方向的任何指针或指向教程的任何链接都会有所帮助。
感谢。
答案 0 :(得分:26)
有三种方法可以以异步方式与套接字通信:
打开常规套接字,但不要从中读取(因为read()
会阻塞),直到您知道要读取的内容为止。您可以使用select()
或poll()
来检查是否有要从套接字中读取的数据,如果有,请阅读它,因为read()
不会阻止。
通过将O_NONBLOCK
标志设置为fcntl()
功能,将套接字切换为非阻塞I / O.在这种情况下,read()
不会阻止。
使用O_ASYNC
的{{1}}选项设置套接字FIOASYNC
标记(有关详细信息,请参阅ioctl()
)。在这种情况下,当有来自套接字的内容时,您将收到man 7 socket
信号。
第三种方法是异步套接字。
答案 1 :(得分:3)
UNIX Network Programming: The sockets networking API中以下五种不同I / O模型的比较会有所帮助:
禁止
无阻塞
I / O多路复用
信号驱动I / O
异步I / O
答案 2 :(得分:2)
如果服务器使用同步套接字,当它正在等待来自客户端的数据时,其主线程被阻塞,因此服务器将不会执行任何操作...如果您有多个客户端连接则这是不好的。在异步套接字中,您可以在等待客户端向您发送数据时执行其他操作,因此现在您可以有多个客户端连接到您
Synchronous使用像receive()这样的函数阻塞,直到它收到消息
异步具有beginReceive()endReceive()或类似函数。它使用回调,当收到消息时,调用回调