我有一个关于TCP连接中的非阻塞套接字的问题。将TCP客户端套接字设置为非阻塞:服务器vs客户端
我已经实现了两个C++类,一个用于TCP服务器和一个客户端。服务器有两个套接字文件描述符,一个用于服务器,一个用于客户端。客户端有一个套接字文件描述符。
我的服务器异步运行和我的客户在一个固定的速度运行。因此,我想要有一个无阻塞的套接字来将数据从客户端发送到服务器s.t.客户端可以以固定速率发送数据而不会停止,并且服务器会同时读取所有已缓冲的数据。
所以我的问题是:如果我在客户端或服务器类中将客户端套接字设置为非阻塞,是否有所作为?(使用fcntl(this->newsockfd_, F_SETFL, fcntl(this->newsockfd_, F_GETFL, 0) | O_NONBLOCK)
,其中this->newsockfd_
是这两类客户的套接字文件描述符)
我在PROGRAMM尝试这样做,它似乎像客户端套接字设置为非阻塞的客户端类没有做的伎俩,但将其设置在服务器级别上。但是,我不明白为什么这应该有所作为。
在什么区别?将套接字设置为非阻塞意味着套接字读取,写入和其他套接字操作将立即返回。然后,您必须准备好处理没有数据传输的情况,因为操作通常会因为没有可读取的数据或出站网络缓冲区已满而被阻塞等。 –