gpt4 book ai didi

C++ 写入套接字导致程序结束

转载 作者:行者123 更新时间:2023-11-30 03:00:35 25 4
gpt4 key购买 nike

我正在制作一个有 2 个线程的套接字服务器,每个线程都在一个循环中运行。第一个寻找新的连接,第二个从已经连接的套接字中读取数据并回复它们。问题出在第二个。 'write' 函数以某种方式打破循环并导致程序完成...没有发生错误...这就是问题所在。

以下代码是第二个线程的函数。如果我不向套接字写入任何内容,程序运行良好

void* SocketServer::threadSocketsRead( void* thisServer )
{
SocketServer* server;
int key,
playersNumber,
requestLength;
Player* player;
char message[256];
string reply;

server = (SocketServer*)thisServer;

while ( 1 )
{
playersNumber = server->players.size();
for ( key = 0 ; key < playersNumber ; key ++ )
{
player = server->players[key];
requestLength = read ( player->socket , (void*)&message , 255 );
if ( requestLength < 0 )
{
perror ( "read" );
}
else
{
/*
If I uncomment the line, it will write data to
the socket and finish the whole program.

If I do no uncomment it, the programs runs in a loop further.
*/

//int result = write ( player->socket , "reply\0" , 6 );
};
}
sleep(1);
}
}

最佳答案

您可能正在写入死套接字并获得 SIGPIPE,其默认操作是终止程序。您可以:

  • 处理SIGPIPE
  • MSG_NOSIGNAL 传递给 send(2)
  • 使用 setsockopt 设置 SO_NOSIGPIPE(不可移植)

关于C++ 写入套接字导致程序结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11841376/

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