websocket это tcp, либо во время отправки произойдет ошибка, что должен ловить клиент и сервер и соответственно реагировать, либо отправка отвалится по таймауту, тоже ошибка.
rPman, либо после отправки никто не получил ack, и соответственно похрен что это tcp. Другой вариант, вы получили ack, и можете быть уверены, что по tcp все было отправлено и получено конечной ОС, что не гарантирует получение конечным бизнесовым ПО, а ведь только оно нас и интересует, а не какие-то очереди внутри ОС.
В чате кроме онлайн отправки сообщений должен быть механизм отложенного получения. После соединения клиент проверяет накопившиеся сообщения. Периодически клиент проверяет потерянные сообщения. Если у сообщений последовательные ID, то по пропускам клиент также определяет потерянные сообщения.
Как вариант контроль не на стороне клиента, а на стороне сервера. Тогда клиент подтверждает получение. Но это больше взаимодействий и хранения данных на стороне сервера.