Я думаю, что у меня проблема. У меня есть два приложения TCP, подключенных друг к другу, которые используют порты завершения ввода / вывода winsock для отправки / получения данных (неблокирующие сокеты).
Все работает отлично, пока не произойдет разрыв передачи данных. Отправитель начинает отправку неверных / искаженных данных.
Я выделяю буферы, которые я отправляю, в стеке, и если я правильно понимаю, это неправильно, потому что эти буферы должны оставаться такими, какими я их отправлял, до тех пор, пока я не получу уведомление IOCP о завершении записи.
Возьмем для примера:
void some_function()
{
char cBuff[1024];
// filling cBuff with some data
WSASend(...); // sending cBuff, non-blocking mode
// filling cBuff with other data
WSASend(...); // again, sending cBuff
// ..... and so forth!
}
Если я правильно понимаю, каждый из этих вызовов WSASend () должен иметь свой собственный уникальный буфер, и этот буфер можно использовать повторно только после завершения отправки.
Правильно?
Теперь, какие стратегии я могу реализовать для поддержания большого количества таких буферов, как я должен их обрабатывать, как я могу избежать снижения производительности и т. Д. '?
И, если я хочу использовать буферы, это означает, что я должен скопировать данные, которые будут отправлены из исходного буфера, во временный, таким образом, я бы установил SO_SNDBUF на каждом сокете на ноль, чтобы система не переписывала то, что я уже скопировано. Ты со мной? Пожалуйста, дайте мне знать, если я не был ясен.