Есть ли разница между <winsock.h> и <winsock2.h>?

Я включаю в себя, как это требуется библиотекой MySQL C.

Автозаполнение в VS2010 также показывает любую идею, что это такое?

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

Спасибо!

Ответ 1

@cost 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.

Ответ 2

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

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