Jeśli używasz blokujących gniazd, spójrz na regulację limitów wysyłania() i recv() za pomocą opcji SO_SNDTIMEO i SO_RCVTIMEO setsockopt().
Istnieje wiele małych skomplikowań w tworzeniu właściwego serwera, chciałbym sprawdzić, czy to przez żebranie, pożyczanie lub kradzież tego. Oto sample multithreaded socket server.
Również, jeśli masz kontrolę nad obiema stronami (oprogramowanie gniazdka klienta i serwera), utworzę protokół, który będzie miał długość wiadomości do przekazania jako pierwsze 2 lub 4 bajty wiadomości, w ten sposób po prostu trzeba zablokować, aby dekodować tę liczbę i kontynuować czytanie aż do liczby bajtów, które minęły. Zrób to zarówno dla klienta, jak i serwera, co znacznie uprości kod.
tak Chcę wiedzieć, czy używam recv() może to prowadzić do DoS? Ponieważ serwer może czekać na to przez długi czas. Na przykład, jeśli mój rozmiar wiadomości jest bardzo duży. – mousey
Należy pamiętać, że można ustawić limit czasu dla gniazda i maksymalny rozmiar bufora na recv, więc możliwości nadużyć mogą być ograniczone. Przypuszczam, że jeśli masz pojedynczy proces, niechciany rówieśnik może wysłać ci wiele bajtów powoli jako atak odmowy usługi ... – MZB