Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть ли стандартные сокеты под mingw? (не объектный враппер) 
:(
    Опции темы
leniviy
Дата 27.7.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



Привет. Я знаю, что под mingw надо заранее планировать, и что готовые линуксовые исходники редко компилируются. Знаю примерно, в чём отличие, и могу сам сделать такую либу. Но сразу она не заработает, и отлаживать долго придется. Нужна 99% совместимость. Кто-то должен был это реализовать. Если нет, буду смотреть cygwin. 

Нужна реализация сокетов как в линуксе под mingw. либы и хедеры.

Это сообщение отредактировал(а) leniviy - 27.7.2008, 15:21
PM MAIL   Вверх
SABROG
Дата 27.7.2008, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: нет
Всего: 91



Стандартных сокетов в языке C++ не существует. Но раз тема в этом разделе, то в Qt есть классы для работы с сокетами, а если Qt, то 99% гарантия, что программа будет собираться и работать на других ОС.

Еще сокеты есть в boost'e.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
leniviy
Дата 27.7.2008, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



это всё обертки.
PM MAIL   Вверх
Mal Hack
Дата 27.7.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: нет
Всего: 261



В винде есть Win Sock, который во многом повторяет синтаксис и абстракцию POSIX сокетов. Понятно, что так или иначе придется что-то добавлять и т.п. Очень хорошо это описано в книге Снейдера "Эффективное программирование TCP/IP". Если надо, могу переслать.

mingw должен их воспринять совершенно спокойно.
PM ICQ   Вверх
Torsten
Дата 27.7.2008, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 10.6.2008
Где: Pskov

Репутация: нет
Всего: 7



leniviy
под виндой реализация сокетов беркли немного отличается, но не настолько чтобы было сложно программировать и переносить приложения.
Скорее всего в твоих исходниках линуксовых применяются юникс специфичные функции и системные вызовы - поэтому на винде ничего компилится не будет. 
Сигвин - конечно выход, но он слишком тормозит сильно.
--------------------
We have no begining, we have no end. We are infinite.
PM MAIL   Вверх
Любитель
Дата 28.7.2008, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: нет
Всего: 92



Тематика раздела C/C++: КП

Это сообщение отредактировал(а) Любитель - 28.7.2008, 14:31


--------------------
PM MAIL ICQ Skype   Вверх
GrayCardinal
Дата 5.8.2008, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



leniviy
Ммм.сокеты вроде стандартные, даже в винде smile
Т.е. socket,send,recv,listen - кроссплатформенные. Только в винде их инитить надо. WSAStartup если не ошибаюсь.

Это сообщение отредактировал(а) GrayCardinal - 5.8.2008, 10:46


--------------------
PM MAIL WWW   Вверх
leniviy
Дата 5.8.2008, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



Если на память, то вот различия (перечислю по сложности реализации). linux way - как адаптировать mingw для компиляции линуксовых исходников (во многих случаях не реально). cross way - как адаптировать исходники, чтобы они компилировались и в mingw, и в линуксе.
Код

WSAStartup            
 linux way             использовать #ifdef
 cross way             использовать #ifdef
тип SOCKET есть только в windows
 linux way             использовать int вместо SOCKET
 cross way             задекларировать тип
константа SOCKET_ERROR есть только в windows
 linux way             использовать -1 вместо SOCKET_ERROR
 cross way             задекларировать константу SOCKET_ERROR
константа INVALID_SOCKET есть только в windows
 linux way             использовать 0 вместо INVALID_SOCKET
 cross way             задекларировать константу
константа EWOULDBLOCK есть только в linux, константа WSAEWOULDBLOCK есть только в windows, и они имеют разные значения
 linux way             #define EWOULDBLOCK WSAEWOULDBLOCK 
 cross way             #define WSAEWOULDBLOCK EWOULDBLOCK
в linux для код ошибки берётся из errno, в windows из WSAGetLastError
 linux way             сделать так, чтобы errno содержал результат WSAGetLastError после любой операции с сокетами
 cross way             реализовать int WSAGetLastError(void) { return errno; }
в linux общая функция close() (в т.ч. и для файлов), в windows closesocket()
 linux way             реализовать версию close(), которая умеет работать и с файлами и с виндовыми сокетами
 cross way             сделать свою функцию closesocket() для линукса
способ включения асинхронного режима различается: в linux есть fcntl, в windows ioctlsocket
 linux way             реализовать версию fcntl(), которая умеет работать и с файлами и с виндовыми сокетами
 cross way             сделать функцию int setnonblocking(SOCKET s, u_long nonblocking), которая одинаково работает и в windows и в linux и использовать её.

А ещё много того, что я не знаю. Например, не известно, пересекаются ли номера файлов и сокетов под windows. Недавно попробовал скомпилировать линуксовый прокси под сигвином. Оказалось, что даже в нём до сих пор нет поддержки ipv6. А ещё этому прокси требовался netfilter! Его под сигвином нет и не будет. 
Уже ясно, что адаптировать существующие исходники для кроссплатформы - значит полностью их переработать. 

Это сообщение отредактировал(а) leniviy - 5.8.2008, 14:18
PM MAIL   Вверх
GrayCardinal
Дата 6.8.2008, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



leniviy
Я бы на твоем месте погуглил на кроссплатформенные лайбы с сокетами smile На моей памяти их было дофига, правда ни одну не юзал - не было потребности smile (винду не юзаю принципиально)

Это сообщение отредактировал(а) GrayCardinal - 6.8.2008, 11:39


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | GNU toolchain | Следующая тема »


 




[ Время генерации скрипта: 0.0944 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.