Подтвердить что ты не робот

Где можно получить заголовок/исходный файл sys/socket.h?

Я пытаюсь написать сервер в стиле С++ Unix, но я застрял на машине под Windows. Я начал с MinGW, но он не скомпилировался правильно и сказал мне, что он не может найти файл "sys/socket.h". Что, конечно же, необходимо для работы сервера. Я пошел искать его, и я думаю, что где-то сказал, чтобы установить Cygwin вместо этого, поскольку он поставляется с большим количеством библиотек. Хорошо, поэтому я установил его. Каждая библиотека, которую он мог бы предложить мне. Затем я пошел снова скомпилировать, и это ЕЩЕ НЕ может найти его. Я отправился на поиски через ENTIRE, включая папку, и не смог найти файл. Таким образом, я немного рассмешился (3 часа в пути для дополнительной функциональности мне не нужен), но я продолжал искать. Я не могу найти его ВЕЗДЕ. Я нахожу несколько ссылок на его использование, но я не могу найти ANYWHERE, чтобы загрузить его. Я искал последние несколько часов, и я очень расстроился из-за всего, потому что нет НИКАКИХ ссылок на то, где я могу его получить (и я НЕ использую winsock. Это нарушает совместимость, если я правильно помню).

Итак, длинный рассказ, где можно загрузить файлы сокета. socket.h '/' socket.c '/' socket.cpp '? Это сделало бы мою жизнь (и я уверен, что жизнь многих других людей) намного проще, и я был бы очень признателен!

4b9b3361

Ответ 1

Учитывая, что Windows не имеет sys/socket.h, вы можете подумать о том, чтобы сделать что-то вроде этого:

#ifdef __WIN32__
# include <winsock2.h>
#else
# include <sys/socket.h>
#endif

Я знаю, что вы указали, что вы не будете использовать WinSock, но так как WinSock - это то, как TCP-сеть выполняется под Windows, я не вижу, что у вас есть альтернатива. Даже если вы используете кросс-платформенную сетевую библиотеку, эта библиотека будет вызывать WinSock внутренне. Большинство стандартных вызовов API-интерфейсов BSD-сокетов реализованы в WinSock, поэтому, немного запускаясь, вы можете сделать ту же самую программу на основе сокетов, как в Windows, так и в других ОС. Просто не забудьте сделать

#ifdef __WIN32__
   WORD versionWanted = MAKEWORD(1, 1);
   WSADATA wsaData;
   WSAStartup(versionWanted, &wsaData);
#endif

наверху main()... иначе все вызовы вашего сокета не будут работать под Windows, потому что подсистема WSA не была инициализирована для вашего процесса.

Ответ 2

Поскольку вы отметили вопрос С++, вам может быть интересно использовать boost:: asio, ACE или какая-либо другая кросс-платформенная библиотека сокетов для С++ или для C. В ответах на библиотека С++ для кросс-платформенной и API-интерфейс кросс-платформенной сети.

Предполагая, что использование сторонней библиотеки кросс-платформенных сокетов не является для вас вариантом...

Заголовок < sys/socket.h > определен в IEEE Std. 1003.1 (POSIX), но, к сожалению, Windows не соответствует стандарту POSIX. Компилятор MinGW является портом GCC для компиляции приложений Windows и поэтому не включает эти заголовки системы POSIX. Если вы установите GCC с помощью Cygwin, тогда он будет включать эти системные заголовки для эмуляции среды POSIX в Windows. Однако имейте в виду, что если вы используете Cygwin для сокетов, которые.), Вам нужно будет поместить cygwin DLL в место, где ваше приложение может его прочитать, и b). Заголовки Cygwin и заголовки Windows не очень хорошо взаимодействуют (так если вы планируете включить windows.h, то вы, вероятно, не хотите включать sys/socket.h).

Моя личная рекомендация - загрузить копию VirtualBox, загрузите копию Ubuntu, установите Ubuntu в VirtualBox, а затем выполните свое кодирование и тестирование на Ubuntu. В качестве альтернативы, мне сказали, что Microsoft продает подсистему UNIX и что она предварительно установлена ​​в некоторых более высокопроизводительных версиях Windows, хотя я понятия не имею, насколько совместима эта система (и, если она соответствует, с какой версией стандарта UNIX соответствует требованиям). Winsockets также являются опцией, хотя они могут вести себя по-разному, чем их аналоги POSIX, хотя подписи могут быть похожими.

Ответ 3

Я хотел бы просто добавить, что если вы хотите использовать библиотеку сокетов Windows, вы должны:

  • в начале: вызов WSAStartup()

  • в конце: вызов WSACleanup()

Привет;

Ответ 4

Попробуйте переустановить cygwin с выбранным пакетом: gcc-g++: сборник gnu compiler С++ (из категории devel), сервер openssh и клиентская программа (net), make: версия gnu (devel), терминал ncurses (utils), расширенный vim редакторы (редакторы), ANSI общей реализации lisp (математика) и libncurses-devel (lib).

Эти файлы библиотеки должны находиться под cygwin\usr\include

С уважением.