什么是异步套接字?

时间:2010-02-25 05:35:34

标签: c sockets asynchronous

什么是异步套接字?它们与普通套接字有什么不同(阻塞和非阻塞)?

该方向的任何指针或指向教程的任何链接都会有所帮助。

感谢。

3 个答案:

答案 0 :(得分:26)

有三种方法可以以异步方式与套接字通信:

  1. 打开常规套接字,但不要从中读取(因为read()会阻塞),直到您知道要读取的内容为止。您可以使用select()poll()来检查是否有要从套接字中读取的数据,如果有,请阅读它,因为read()不会阻止。

  2. 通过将O_NONBLOCK标志设置为fcntl()功能,将套接字切换为非阻塞I / O.在这种情况下,read()不会阻止。

  3. 使用O_ASYNC的{​​{1}}选项设置套接字FIOASYNC标记(有关详细信息,请参阅ioctl())。在这种情况下,当有来自套接字的内容时,您将收到man 7 socket信号。

  4. 第三种方法是异步套接字。

答案 1 :(得分:3)

UNIX Network Programming: The sockets networking API中以下五种不同I / O模型的比较会有所帮助:

禁止

无阻塞

I / O多路复用

信号驱​​动I / O

异步I / O

答案 2 :(得分:2)

如果服务器使用同步套接字,当它正在等待来自客户端的数据时,其主线程被阻塞,因此服务器将不会执行任何操作...如果您有多个客户端连接则这是不好的。在异步套接字中,您可以在等待客户端向您发送数据时执行其他操作,因此现在您可以有多个客户端连接到您

Synchronous使用像receive()这样的函数阻塞,直到它收到消息

异步具有beginReceive()endReceive()或类似函数。它使用回调,当收到消息时,调用回调