У меня есть один сервер и несколько клиентов UDP, и каждый из них отправляет логическую строку (не более 5 байт) через равные промежутки времени (несколько миллисекунд). На основании которого я определяю, является ли устройство живым или нет. Число клиентов неизвестно до запуска программы и использования c ++ в качестве моего языка программирования.
Возможно ли иметьмногопоточность в соединении UDP-сокета? Я наткнулся на пример для TCP, где они создают новый дескриптор сокета и порождают поток. Если возможно создать многопоточную обработку для UDP, пожалуйста, предоставьте пример / справочный код.
Во время
while (true)
{
if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0,
(struct sockaddr *)&cient_addr, &client_addr_len)) == -1)
{
perror("recvfrom");
exit(1);
}
// Process buffer...
// Do something with buffer
}
В сценарии с несколькими клиентамиесли я получаю сообщение от одного клиента, оно копируется в локальный буфер с максимальным размером буфера. И во время обработки этого сообщения, если мы получим еще одно сообщение от другого клиента, где оно будет храниться с перерывами перед чтением в локальный буфер? Дескриптор файла сокета имеет свой собственный буфер?
Что произойдет, если оба клиента отправят сообщение одновременно? Только один читается в локальном буфере, что будет с другим сообщением? это будет ждать следующего recvfrom?
Я прочитал, что если Максимальный буфер меньше размера сообщения / полученного пакета, тогда recvfrom будет считывать только максимальную длину буфера и может через некоторую ошибку ... Хотя все мои клиентыотправлять только 5 байтов максимум. Если я назначу Максимальные байты в 1024 байта, что намного больше, чем ожидалось, какие цены я буду платить?
Спасибо.