Udp soketi kullanarak bir sunucu yazıyorum. Bir istemcinin bağlantı kurmak için ilk mesajı gönderdikten sonra, bu soket üzerinde bu istemci ile iletişim kurmak için yeni soket açın (ilk soketler için) ve her istemci için bir iş parçacığı oluşturun. Ancak iş parçacığında, süre döngüleri sonsuza kadar sürüyor, çünkü her müşteri veri göndermesine rağmen her zaman veri alıyor. Kodumdaki sorun nedir?sonsuz alıcı sorununu geri getiriyor
aşağıdaki kod örneği:
int main()
{
.....
// creating socket
if((sock = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("Socket cannot be created\n");
return FAILURE;
}
.....
for(; ;)
{
// TAKE CLIENTS INFORMATION
/**************************************/
recvfrom(sock, &client, sizeof(Client), MSG_WAITALL, (struct sockaddr *)&clientAddr, &size); //1
.......
if((sock2 = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("Socket cannot be created\n");
return FAILURE;
}
client.sock = sock2;
...
pthread_create(thid+num_client-1, NULL, messanger, (void*)(clients + num_client-1));
} // end of for loop
}// end of main
// thread function
void *messanger(void *argClient)
{
Client client = *(Client*)argClient;
...
while(strcmp(message.buffer, "exit") != 0)
{
recvfrom(client.sock, &message, sizeof(Message), MSG_WAITALL, (struct sockaddr *)&clientAddr, &size);
printf("%s\n", message.buffer);
}// this file loops infinetely altough client does not send data. Printf prints onln new line
}
hmm. Bunu deneyeceğim. Çözümümden de memnun kalmamıştım. Ancak tcp sunucusunda, kabulden döndürülen fd sayısı daha kolay çalışır. Bu yüzden bu fd numarasında belirli bir müşteri ile iletişim kurabilirim. Bu şekilde davranmaya çalıştım ama yolun bu olmadığını görüyorum. Cevaplar için teşekkürler – cemal