gpt4 book ai didi

c - 代理需要非阻塞套接字吗?

转载 作者:可可西里 更新时间:2023-11-01 02:52:54 24 4
gpt4 key购买 nike

我有以下代码:

 {                                
send(dstSocket, rcvBuffer, recvMsgSize, 0);
sndMsgSize = recv(dstSocket, sndBuffer, RCVBUFSIZE, 0);
send(rcvSocket, sndBuffer, sndMsgSize, 0);
recvMsgSize = recv(rcvSocket, rcvBuffer, RCVBUFSIZE, 0);
}

它最终应该成为通用 TCP 代理的一部分。现在,它并不能完全正确地工作,因为 recv() 等待输入,因此数据只能以 block 的形式传输,具体取决于它当前所在的位置。

我读到的是我需要类似“非阻塞套接字”的东西和一种监视它们的机制。我发现这种机制在 Linux 中是 select、poll 或 epoll。谁能给我一个确认,我在这里是在正确的轨道上吗?或者这个练习也可以用阻塞套接字来完成吗?

问候

最佳答案

你走在正确的轨道上。

“select”和“poll”是系统调用,您可以在其中传递一个或多个套接字并阻塞(特定时间),直到在其中一个套接字上接收到(或准备好发送)数据。

“非阻塞套接字”是一种可以应用于套接字(或 recv 调用标志)的设置,这样,如果您尝试调用 recv,但没有可用数据,调用将立即返回。 “发送”存在类似的语义。您可以使用带有或不带有上述选择/轮询方法的非阻塞套接字。使用非阻塞操作通常是个不错的主意,以防万一您收到不存在的数据信号。

“epoll”是 select 和 poll 的一个高度可扩展的版本。 “选择”集实际上仅限于一次监视 64-256 个套接字,并且随着监视的套接字数量的增加,性能会受到影响。 “epoll”可以扩展到数千个并发网络连接。

关于c - 代理需要非阻塞套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7214048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com