senin kodların üzerinden yorum yapamayacağım ancak ben bu işi şöyle çözmüştüm.
void sendToAll(CHAR* data, DWORD length) {
WSABUF buffer;
buffer.buf = data;
buffer.len = length;
ClientConnection* cc = cc->first;
while(cc != NULL) {
try {
WSASend(cc->getSocket(), &buffer, 1, NULL, 0, NULL, NULL);
} catch(CHAR* error) {
printf("Error occured: %s\n",error);
}
cc = cc->next;
}
}
void sendToRest(ClientConnection* sender, CHAR* data, DWORD length) {
WSABUF buffer;
buffer.buf = data;
buffer.len = length;
ClientConnection* cc = cc->first;
while(cc != NULL) {
if(cc != sender) {
try {
WSASend(cc->getSocket(), &buffer, 1, NULL, 0, NULL, NULL);
} catch(CHAR* error) {
printf("Error occured: %s\n",error);
}
}
cc = cc->next;
}
}
void reply(ClientConnection* sender, CHAR* data, DWORD length) {
WSABUF buffer;
buffer.buf = data;
buffer.len = length;
try {
WSASend(sender->getSocket(), &buffer, 1, NULL, 0, NULL, NULL);
} catch(CHAR* error) {
printf("Error occured: %s\n",error);
}
}
sendToAll - sender bilgisine ihtiyaç duymuyor. Linked listte ne kadar client varsa hepsine gönderiyor aynı bilgiyi.
sendToRest - hemen hemen SendToAll ile aynı ancak fazladan sender parametresi alıyor. paketi gönderen her kimse o hariç tüm clientlara gönderiyor paketleri.
reply - bu ise sadece paketi gönderene yanıt olarak paket gönderiyor.
Benim başka bir case'e ihtiyacım olmamıştı. Yani gruplar halinde bir client grubuna paket göndermem gerektirecek bir durum olmamıştı. O tür ihtiyaçlar doğdukça bu fonksiyonların birkaç ilave parametre alan versiyonlarına da ihtiyaç olacaktır tabii ki.