gpt4 book ai didi

c++ - 具有多个客户端的服务器 - 使用 select() 编写

转载 作者:行者123 更新时间:2023-11-30 03:04:21 24 4
gpt4 key购买 nike

我正在尝试编写一个同时处理多个客户端的服务器。显然我应该使用 select。我找到了很多教程,但没有一个是关于写作的。

我知道我应该如何读入数据,但是在我的“循环”中处理回写给客户端的适当方法是什么?

提前致谢。

最佳答案

如果您有要发送到特定套接字的数据,那么当该套接字的输出缓冲区中有可用空间时,您需要 select() 返回。告诉 select() 这样做的方法类似于仅将 select() 用于读取 - 除了您还对第二个 fd_set 对象执行 FD_SET。

int socks[10] = {... some client sockets...}

while(1)
{
fd_set readSet, writeSet;

FD_ZERO(&readSet);
FD_ZERO(&writeSet);

int maxSock = -1;
for (int i=0; i<10; i++)
{
FD_SET(socks[i], &readSet);
if (socks[i] > maxSock) maxSock = socks[i];

if (IHaveDataToSendToThisSocket(i)) // implement this function as appropriate to your program
{
FD_SET(socks[i], &writeSet);
if (socks[i] > maxSock) maxSock = socks[i];
}
}

int ret = select(maxSock+1, &readSet, &writeSet, NULL, NULL);
if (ret < 0)
{
perror("select() failed");
break;
}

// Do I/O for sockets that are ready
for (int i=0; i<10; i++)
{
if (FD_ISSET(socks[i], &readSet))
{
// there is data to read on this socket, so call recv() on it
}

if (FD_ISSET(socks[i], &writeSet))
{
// this socket has space available to write data to, so call send() on it
}
}
}

关于c++ - 具有多个客户端的服务器 - 使用 select() 编写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8674491/

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