Код не читал @ сразу отвечал.
Кол-во принятых и прочитанных байт при асинхронном сокете tcp (и, надо полагать, udp - не работал с ним) никто не гарантирует. Надо постоянно проверять.
Ещё раз повторю: и для
отправленного тоже. То есть вы должны убедиться, что отправлен весь указанный буфер, а не его часть. Соответственно, часть буфера возможно придётся "отправлять" (передавать в функцию отправки) ещё раз. Последнее - довольно частый баг, т.к. может не проявлять себя сколь угодно долго (пока сеть не будет забита => часть инфы не будет фактически отправлена с первого раза => потеряется часть информации и принимающая система упадёт):
http://habrahabr.ru/post/213063/