それぞれがループで実行される 2 つのスレッドを持つソケット サーバーを作成しています。1 つ目は新しい接続を探し、2 つ目は既に接続されているソケットからデータを読み取り、それらに応答します。問題は2番目のものです。'write' 関数は何らかの形でループを破り、プログラムを終了させます...エラーは発生しません...それが問題です。
次のコードは、2 番目のスレッドの関数です。ソケットに何も書き込まなければ、プログラムはうまく動作します
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);
}
}