2) Кроссплатформенного способа вроде нет.
В linux есть ioctl SIOCOUTQ который позволяет определить, сколько еще не отосланных (не подтвержденных) данных есть в буфере отправки.
В других ОСях наверно тоже что-то подобное есть.
Зная, сколько байтов мы отправили в сокет, и вычитая из них эти не отосланые, можно определить, сколько доставлено.
Хотя обычно прикладной протокол построен по принципу запрос-ответ.
Так что получая ответ на свой запрос вы получаете подтверждение доставки запроса.
Т.е. проблемы этой вобщем-то не существует.