gpt4 book ai didi

c++ - 选择功能 windows vs linux

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:22 24 4
gpt4 key购买 nike

我有以下代码,它在 Windows 环境下运行良好,而在 Linux 中使用相同的代码却没有(除了库的一些更改)。选择功能不响应新连接。

相关代码如下:

struct SocketState
{
int id; // Socket handle
int recv; // Receiving?
int send; // Sending?
int sendSubType; // Sending sub-type
char buffer[128];
int len;
int authenticate;
char userName[10];
};


struct SocketState sockets[MAX_SOCKETS]={0};

int socketsCount = 0;


int main()
{


int listenSocket = socket(PF_INET, SOCK_STREAM, 0);

if (-1 == listenSocket)
{
return 0 ;
}

struct sockaddr_in serverService;

serverService.sin_family = AF_INET;

serverService.sin_addr.s_addr = htonl(INADDR_ANY);

serverService.sin_port = htons(TIME_PORT);


if (-1 == bind(listenSocket, (struct sockaddr*)&serverService, sizeof(serverService)))
{
perror("Couldn't bind socket");
return -1;
}


if (-1 == listen(listenSocket, 10))
{

perror("Couldn't listen to port");
}

addSocket(listenSocket, LISTEN);


while (true)
{

fd_set waitRecv;
FD_ZERO(&waitRecv);
for (int i = 0; i < MAX_SOCKETS; i++)
{
if ((sockets[i].recv == LISTEN) || (sockets[i].recv == RECEIVE))
FD_SET(sockets[i].id, &waitRecv);
}

fd_set waitSend;
FD_ZERO(&waitSend);
for (int i = 0; i < MAX_SOCKETS; i++)
{
if (sockets[i].send == SEND)
FD_SET(sockets[i].id, &waitSend);
}


int nfd;
nfd = select(0, &waitRecv, &waitSend, NULL, NULL);
if (nfd == -1)
{

return 0 ;
}
}
}

最佳答案

您将 0 作为第一个参数传递给 select。那是错的。可能在 Windows 中不使用此参数,但在 linux 中必须正确设置。

它必须设置为更高的fd加1。

关于c++ - 选择功能 windows vs linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10773129/

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