2010-08-02 2 views

ответ

1

Я просто цитирую из here.

Изменение:

#include <winsock.h> 

To:

#include <winsock2.h> 

не делает никакой разницы, кроме возможности использовать Winsock2 конкретных вызовов. Вы можете быть на самом деле используете winsock2, даже если вы включают в себя только winsock.h. Фактическая разница составляет . Ссылка на wsock32.lib (winsock 1.1) или ws2_32.lib (winsock 2.2). Как я уже сказал, вы должны использовать его. Просто , изменив файлы заголовков или lib, где вы связаны, не делает любой вид разницы в производительности, Эффективность, что угодно. На самом деле вы можете свободно совместимы с os, что поддерживает чистые вызовы сокетов BSD, когда меняется на ws2, не используя его.

Winsock2 пришел для исполнения. В качестве логического элемента управляет ядро ​​windows (например, ). Все ваши winsock 1.1, такие как базовые вызовы отправки/возврата , напрямую сопоставляются с . Winsock 2.2, копия (WSASend/WSARecv) .winsock2 is only downward compatibe with winsock.

1

Как ни странно, похоже, что он использует только 1.1.

У вас должен быть исходный код с установкой VS - вы увидите, что в stdafx.h он включает winsock.h (not 2), а в sockcore.cpp есть код для инициализации 1.1. MFC VS2010 - то же самое.

Если вы хотите использовать winsock2 в своем собственном коде, вам нужно включить заголовок перед заголовком MFC в stdafx.h проекта, чтобы объявления не сталкивались. Надеемся, что это не сломает интерфейс AfxSocket: -/

+0

Спасибо за краткое объяснение Rup. –