由于我是最近才学习libev的新手,因此io_watcher中有一个我不太理解的可读/可写概念。就我所知,Linux系统编程中有一个参数:
O_ASYNC


那么,既然普通文件不会影响可读/可写,那么套接字编程中的可读/可写真正意味着什么?内核采取了什么措施来确定套接字文件描述符是否可读?

考虑到“一切都是文件”的理念,具有不同描述符编号的每个套接字描述符实际上都指向同一文件吗?如果是这样,我是否可以认为可读写问题是由同步引起的?

好吧,看来我问了一个愚蠢的问题。我真正的意思是套接字和常规文件都是通过文件描述符读写的,所以为什么套接字描述符具有可读/可写的概念,而常规文件却没有。既然EJP告诉我这是因为缓冲区和每个描述符都有它们自己的一对缓冲区,所以我的结论是:可读/可写概念是针对缓冲区的,如果缓冲区为空,则它是不可读的,而当缓冲区已满时,它是不可写的。可读和可写与同步无关,并且由于常规文件没有缓冲区,因此它始终是可读和可写的。

还有更多问题:当说接收缓冲区时,此缓冲区在int recv(SOCKET socket, char FAR* buf, int len, int flags);中不是一回事,对吗?

最佳答案

可读表示套接字接收缓冲区中存在数据或FIN。

可写意味着套接字发送缓冲区中有可用空间。

文件没有套接字发送或接收缓冲区。



那是什么哲学?



什么文件他们为什么要指向相同的东西?问题没有道理。



它“指向”很多东西:源地址,目标地址,源端口,目标点,一对缓冲区,一组计数器和计时器,...



除非您谈论的是/dev/...中的设备驱动程序条目,否则没有所谓的“文件代表网络硬件”之类的东西。 TCP套接字是连接的端点。它特定于该连接,TCP,源地址和目标地址以及端口,...

10-07 19:46
查看更多