其他分享
首页 > 其他分享> > 可读/可写在socket文件描述符中意味着什么?为什么常规文件不打扰?

可读/可写在socket文件描述符中意味着什么?为什么常规文件不打扰?

作者:互联网

由于我最近刚学习libev,在io_watcher中有一个可读/可写的概念,我不太明白.据我所知,linux系统编程中有一个参数:

O_ASYNC

A signal (SIGIO by default) will be generated when the specified file
becomes readable or writable. This flag is available only for
terminals and sockets, not for regular files.

因此,由于常规文件不会打扰可读/可写,插槽编程中的可读/可写是什么意思?内核做了什么措施来确定套接字文件描述符是否可读?

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

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

还有更多的问题:当说接收缓冲区时,这个缓冲区在int recv中是不一样的(SOCKET套接字,char FAR * buf,int len,int flags);对吧?

解决方法:

可读意味着套接字接收缓冲区中存在数据或FIN.

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

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

Considering the everything-is-a-file philosophy

那是什么哲学?

does every socket descriptor with different descriptor number actually point to the same file?

什么文件?为什么他们指向同一个东西?问题没有意义.

I’m confused with one thing: when a socket is created, the descriptor is actually point to the receive and send buffers of the socket

它指的是’很多东西:源地址,目标地址,源端口,目标点,一对缓冲区,一组计数器和定时器,……

not the file represent the net hardware.

没有“文件代表网络硬件”这样的东西,除非你在讨论/ dev / …中的设备驱动程序条目,这几乎不相关. TCP套接字是连接的端点.它特定于TCP,源和目标地址和端口的连接,……

标签:c-3,linux,sockets,libev
来源: https://codeday.me/bug/20191002/1841839.html