什么是异步套接字?

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

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

谢谢。

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

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

  2. 通过使用fcntl()函数设置O_NONBLOCK标志,将套接字切换到非阻塞I / O. 在这种情况下, read()不会阻塞。

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

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

在UNIX网络编程中比较以下五种不同的I / O模型:套接字网络API会很有用:

闭塞

非阻塞

I / O复用

信号驱动的I / O.

异步I / O.

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

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

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