Нет, код не гарантирует получение полного сообщения. Вы должны проверить количество полученных байтов и выполнить цикл, пока не получите полное сообщение.
Имейте в виду, что вы также можете начать получать часть следующего сообщения, если несколько сообщений отправляются последовательно от клиента. Например, если ваше сообщение имеет размер 100 байт, первый вызов может вернуть 60 байт, и вы будете выполнять цикл и снова читать и получать 58 байт, что означает, что вы получили 100 байт первого сообщения и первых 18 байт следующего сообщения, так что вам нужно правильно обработать это.
Примечание. Вы не можете делать какие-либо предположения о том, как байты будут разделяться по мере их получения. Это всего лишь поток, и операционная система уведомит вас о том, что она начнет получать данные, без какой-либо концепции формирования сообщений, и вам остается только управлять.
Надеюсь, что это имеет смысл.