Есть ли разница между <winsock.h> и <winsock2.h>? - PullRequest
15 голосов
/ 06 февраля 2012

Я включаю, как того требует библиотека MySQL C.

Автозаполнение в VS2010 также показывает - есть ли у вас какие-либо идеи?

Они взаимозаменяемы, иЕсть ли преимущества одного над другим?

Спасибо!

Ответы [ 2 ]

24 голосов
/ 07 февраля 2012

@ cost's answer ссылки на обсуждение, которое, помимо прочего, задает этот вопрос, на который так и не был дан ответ:

Есть ли причина, по которой я не могу включить windows.h до winsock2.h, он дает мне массу ошибок, но как только я переключаю их порядок, все в порядке ... почему?

windows.h включает winsock2.h при компиляции для более новыхВерсии для Windows, но для более старых разработок вместо них используется winsock.h.Однако проблема не ограничивается только windows.h.Каждый раз, когда winsock.h включается до winsock2.h, будут ошибки компилятора.Причина в том, что два файла НЕ сосуществуют очень хорошо.winsock2.h был разработан, чтобы заменить winsock.h, а не расширять его.Все, что определено в winsock.h, также определено в winsock2.h.Если winsock2.h включено до winsock.h, winsock2.h определяет _WINSOCKAPI_ для предотвращения обработки компилятором последующих включений winsock.h, и все в порядке.Но если winsock.h включено до winsock2.h, winsock2.h не обнаружит это и попытается переопределить все, что winsock.h уже определило, что приведет к сбою компиляции.

Вы должны бытьочень осторожны при смешивании кода, который использует winsock.h с кодом, который использует winsock2.h в том же проекте.Например, при написании собственного кода сокета, использующего winsock2.h, и использовании сторонних библиотек, которые все еще используют winsock.h.

7 голосов
/ 06 февраля 2012

Вы должны использовать winsock2.h, если вы не хотите использовать Winsock 1.1. winsock2.h для Winsock 2.

Подробнее об этом можно прочитать на странице Wikipedia Winsock .

...