Я пишу небольшое приложение, которое включает UDP Hole-Punching для P2P-Communication, реализованный в Linux (Posix Sockets).Пока это работает хорошо, но у меня есть проблема с входящими пакетами.
После того, как два клиента получили информацию от соответствующего клиента, они начинают отправлять UDP-пакеты, чтобы сделать дыры в своем брандмауэре.
И тут появляется моя проблема: после отправки «HolePunching-Packet» клиент прослушивает (rcv) входящие пакеты.Если клиент получает «HolePunching-Packet», процесс перфорирования успешно останавливается, и пользователь может начать прием / отправку пользовательских данных.
Но если HolePunching-пакет другого клиента удерживается межсетевым экраном клиентов, этот пакет никогда не достигнет вызова rcv, и текущий поток будет заблокирован, пока следующие пользовательские данные не "разбудят" клиента, но этот перкулярный пакет используется процессом перфорирования и не может быть передан пользователю.
Поэтому я ищу какой-либо способ вернуть первый полученный пакет udp обратно в приемное устройство.-буфер системы.Я не могу использовать свои собственные (char) буферы в качестве противопоказания для проекта и должен найти обходной путь, если нет способа достичь этого с помощью posix-методов.
Ребята, вы знаете какой-нибудь метод, чтобы сделать это вСистемы Posix?
Вот примерная схема работы моего приложения:
SocketClass
{
Punching
{
send(Give me the IP:PORT of Client2)
recv(Peerinformation)
send(HolePunchingPacket to client2)
recv(HolePunchingPacket from client2 or userdata)
if (recvedPacket != HolePunching-Packet)
put_back_in_recvbuffer(recvedPacket)
done
}
UserCode
{
[...]
}
}