Мобильность Winsock 2

Добавьте пустой файл __init__.py в путь locallibrary\settings

Затем выполните команду управления с помощью python manage.py runserver --insecure --settings=locallibrary.settings

6
задан Skurmedel 6 May 2009 в 13:42
поделиться

6 ответов

Winsocks не очень совместимы с сокетами Posix:

  • В Winsocks сокет имеет тип SOCKET . В Posix это просто файловый дескриптор ( int ), для которого вы можете выполнять обычные вызовы read () и write () .
  • Они не t возвращать ошибки одинаково.
  • Они не поддерживают некоторые опции в recv () и send () .
  • Вы должны инициализировать и унифицировать библиотеку Winsocks с двумя специальными функциями.
  • Я не думаю, что вы можете закрыть сокеты Windows с помощью shutdown () или close () . Вместо этого это что-то вроде closesocket () .

Должно быть больше различий, но это то, что я могу вспомнить прямо сейчас. Если вы хотите переносимости с Winsocks, вы '

3
ответ дан 8 December 2019 в 18:41
поделиться

Сколько штук сокетов вы будете использовать? Я сделал несколько приложений, где сокеты были довольно высокого уровня (открывать, читать, писать) и отлично работали от Windows до Linux. Если это больше, чем это - идти с повышением.

1
ответ дан 8 December 2019 в 18:41
поделиться

Честно говоря, я бы использовал boost :: asio в качестве первого предпочтения. Если вы действительно хотите разбираться с API сокетов, вы можете использовать стандартный API сокетов в стиле BSD как для Windows, так и для Linux - просто в Windows вам нужно будет ссылаться на (и инициализировать) Winsock2, тогда как на В Linux у вас не будет отдельной библиотеки для ссылок.

1
ответ дан 8 December 2019 в 18:41
поделиться

Я разработал несколько переносных оберток для сокетов. Убедитесь, что вы не спускаетесь по дрянной дороге без возврата, состоящей из событий WinSock2. Помимо этого, на мой взгляд, самые большие различия заключаются в следующем:

  • для запуска сети в Windows вам нужно вызвать :: WSAStartup () , чтобы закрыть его в Windows, запустите :: WSACleanup () ; в Linux ничего не делать,
  • close () в Linux - это closesocket () в Windows,
  • размеры буфера по умолчанию различаются между драйверами и операционными системами, поэтому обязательно установите их, используя SO_RCVBUF и SO_SNDBUF ,
  • SO_REUSEADDR крадет адрес в Windows, позволяет частое повторное открытие в Linux; вы, вероятно, захотите использовать этот флаг только в Linux,
  • делая неблокирующий сокет использует :: ioctlsocket () в Windows, :: fcntl () в Linux,
  • файлы заголовков разные, и другие в Linux, в Windows,
  • для переносимости, самый простой способ - это использовать :: select () , чтобы дождаться прибытия данных,
  • fd_set в Windows / Linux совершенно другие; это актуально только в том случае, если вам нужно оптимизировать инициализацию fd_set s, например, при добавлении / удалении произвольных сокетов,
  • в Windows любой поток, висящий на сокете, освобождается с кодом ошибки, когда сокет закрыт, в Linux поток остается в ожидании. Если поток блокирует сокет, например, с помощью :: recvfrom () , вы можете рассмотреть возможность использования ::
5
ответ дан 8 December 2019 в 18:41
поделиться

Взгляните на библиотеку «Adaptive Communications Environment» (ACE): (Домашняя страница ACE) Он предоставляет несколько хороших абстракций и большую гибкость, объединенные в портативную библиотеку, которая поддерживает Windows, MacOS и Linux. У него довольно крутая кривая обучения, но я получил от него очень хорошую оценку.

2
ответ дан 8 December 2019 в 18:41
поделиться

Взгляните на это ... http://sourceforge.net/projects/cpp-sockets/

1
ответ дан 8 December 2019 в 18:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: