socket. Пренести из win в linux

Тема в разделе "WASM.UNIX", создана пользователем Consto, 20 авг 2007.

  1. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    здравствуйте
    надо переделать пргр на mam32 в пргр на C для linux. Появились вопросы:
    1.Что лучше fork() или select() если сокетов до 10000. Есть ли ещё какой-нибудь способ, например как в win с посылкой FD_READ,FD_CLOSE...
    2.можно ли некоторые функции не использующие WinApi вставить как obj

    PS : linux(frenzy(FreeBSD)) у меня будет только в субботу -> проверить самому нет возможности.
     
  2. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    http://www.kegel.com/c10k.html
    http://www.ozon.ru/context/detail/id/2881910/
     
  3. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Consto
    Большинство виндовых API можно заменить на стандартные сишные эквиваленты (LIBC в *никсе). Обьектник в формате coff к *никсовому эльф-экзешнику врядли удастся прилинковать, хотя теоретически можно. Лучше один раз переписать всё на С, если реального обоснования использованию асма в данном случае нет. Или подогнать исходник под интеловский формат GAS и пересобрать всё этим самым GAS'ом. Но я бы советовал перейти на С.
     
  4. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    там я нашёл только функции типа send, recv. меня интерисует аналог WSAAsyncSelect,
    в
    мне нравится kqueue(), но т.к. только под FreeBSD то не подходит, select ограничено FD_SETSIZE, значит получается только poll() ?

    нашёл у себя FASM, попрообую им перекомпилить
     
  5. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    В таком случае тебя должны заинтересовать функции вида aio_xxx.


    Не только. NetBSD, OpenBSD, MacOS.


    Неверно, это дефолтовое значение, которое можно наращивать при необходимости.
    Но select - это опрос, а значит при большом кол-ве сокетов настанет жопа.


    В FreeBSD poll реализован так же как и select, подозреваю что в других системах
    примерно тоже самое.



    Если внимательно читать предложенный линк,
    то можно заметить упоминание про libevent, которая является лишь обёрткой для
    большинства интерфейсов (kqueue, epoll, poll, select); она достаточно компактна,
    и при желании можно написать полноценный аналог, конкретный же механизм будет
    выбираться в рантайме или при сборке (ну почти).
     
  6. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    ага, только не понятно они вызываются без мессаджей, напрямую чтоли. надо делать accept'ный цикл и пока accept ждёт они могут вызваться или только во время aioPoll()? я не смог найти примеры, может у Вас есть ссылки на примеры.
     
  7. Kp0T

    Kp0T New Member

    Публикаций:
    0
    Регистрация:
    10 ноя 2007
    Сообщения:
    9
    Скомпиленная прога с WSAAsyncSelect имеет на 1 поток больше. Дальше хуже (любопытных прошу в отладчик отслеживать WSAAsyncSelect)....
    Используй select в отдельном потоке и будет WSAAsync :)
    gl