|
Системное программирование в среде WindowsНиже мы предполагаем, что пользовательскому типу MESSAGE соответствует 4-байтовый заголовок. Но даже для 4-байтового заголовка требуются повторные вызовы функции recv, чтобы гарантировать его полное считывание, поскольку функция recv не является атомарной. Примечание, относящееся к Win64 В качестве типа переменных, используемых для хранения размера сообщения, выбран тип данных фиксированной точности LONG32, которого будет вполне достаточно для размещения значений параметра размера, включаемого в сообщения при взаимодействии с системами, отличными от Windows, и который годится для возможной последующей перекомпиляции программы для ее использования на платформе Win64 (см. главу 16). DWORD ReceiveMessage (MESSAGE *pMsg, SOCKET sd) { /* Сообщение состоит из 4-байтового поля размера сообщения, за которым следует собственно содержимое. */ DWORD Disconnect = 0; LONG32 nRemainRecv, nXfer; LPBYTE pBuffer; /* Считать сообщение. */ /* Сначала считывается заголовок, а затем содержимое. */ nRemainRecv = 4; /* Размер ...» | Код для вставки книги в блог HTML
phpBB
текст
|
|