WSASend ....

Тема в разделе "WASM.NETWORKS", создана пользователем leeloo, 11 май 2008.

  1. leeloo

    leeloo New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2004
    Сообщения:
    31
    Код (Text):
    1. SendBytes dd ?
    2. wsa_buf  WSABUF <?>
    3. MyAdresLocalIP  db "192.168.0.1",0
    4.  
    5. lea eax,    MyAdresLocalIP
    6. mov wsa_buf.buf,    eax
    7. invoke  lstrlen,    addr MyAdresLocalIP    
    8. mov wsa_buf.len,    eax        
    9. invoke WSASend, Socket, addr wsa_buf, 1, addr SendBytes, 0, NULL, NULL 
    10. .if eax == SOCKET_ERROR
    11. ..
    Получаю WSAEFAULT

    The lpBuffers, lpNumberOfBytesSent, lpOverlapped, or lpCompletionRoutine argument is not totally contained in a valid part of the user address space.

    В чем моя ашыпка?
    Непойму...
     
  2. fourty_fourty

    fourty_fourty Андрей

    Публикаций:
    0
    Регистрация:
    23 фев 2008
    Сообщения:
    23
    Адрес:
    Нязепетровск
    leeloo
    Попробуй обычным send'ом, проще ;)
     
  3. leeloo

    leeloo New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2004
    Сообщения:
    31
    Может быть и проще , но у меня не приходит событие FD_READ ....
    Не пойму в чем дело...
     
  4. fourty_fourty

    fourty_fourty Андрей

    Публикаций:
    0
    Регистрация:
    23 фев 2008
    Сообщения:
    23
    Адрес:
    Нязепетровск
    leeloo
    Посмотри под дебаггером свою прогу, скорей всего после send'a ошибка должна быть "WSAENOTCONN", надо через connect ципаться к тому кому отправляешь!
     
  5. leeloo

    leeloo New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2004
    Сообщения:
    31
    fourty_fourty

    Я ж обозначил ...

     
  6. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    fourty_fourty
    Пятый параметр WSASend, насколько я понял - не опциональный. Мельком глянул в мсдн, там этот параметр может принимать следующие значения:
    MSG_DONTROUTE;
    MSG_OOB;
    MSG_PARTIAL, и ни одно из них не является нулем.

    ЗЫ. WSASend не пользовал, могу ошибаться.
     
  7. nester7

    nester7 New Member

    Публикаций:
    0
    Регистрация:
    5 дек 2003
    Сообщения:
    720
    Адрес:
    Russia
    WSAStartup()?
     
  8. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    leeloo, фасмовый вариант твоего кода очень даже работает. Безо всяких WSAEFAULT. Сурс надо?
    Aspire, нет, флаги опциональные, ноль тоже сойдёт.
     
  9. leeloo

    leeloo New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2004
    Сообщения:
    31
    iZzz32, nester7, Aspire.

    Ок , победил я этого зверя.

    Переменная wsa_buf должна быть локальной.
    Спасибо всем, тема закрыта. Клиент-сервер в одном флаконе готов.
     
  10. TarasCo

    TarasCo New Member

    Публикаций:
    0
    Регистрация:
    2 фев 2005
    Сообщения:
    106
    Что то вы неправильно там пофиксили у себя. Переменная wsa_buf олжна быть правильно инициализирована, а где она находится: на стеке или в секции данных - неважно. Ошибка WSAEFAULT говорит о том, что в драйвер был передан неправильный указатель на буфер с данными.
     
  11. leeloo

    leeloo New Member

    Публикаций:
    0
    Регистрация:
    6 июн 2004
    Сообщения:
    31
    TarasCo

    А по исходнику не видно, как я передаю указатель?

    МСДН

    WSAEFAULT - The lpBuffers, lpNumberOfBytesSent, lpOverlapped, lpCompletionRoutine parameter is not totally contained in a valid part of the user address space.

    Т.е. как я понял переменная должна находится в адресном пространстве функции (т.е. локальная).(?????)
    Проверено дебагером ....
    Глобально - ошибка, локально - работает.
     
  12. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    leelooМожет, просто, вместо addr поставить offset ?
     
  13. Com[e]r

    Com[e]r Com[e]r

    Публикаций:
    0
    Регистрация:
    20 апр 2007
    Сообщения:
    2.624
    Адрес:
    ого..
    Aspire
    штозабред?
     
  14. Aspire

    Aspire New Member

    Публикаций:
    0
    Регистрация:
    19 май 2007
    Сообщения:
    1.028
    Comer_
    Это не бред, это предположение. Ведь addr - это обращение только к переменным внутри ф-ции.
    leeloo пишет addr wsa_buf и если эта переменная локальна, то код работает.
    Вот я и предположил, что можно оставить переменную глобальной и поmенять в коде addr на offset.
     
  15. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    leeloo
    это не одно и тоже и второе вообще первый раз слышу.
    локальная так и называется - локальная.
    не делай таких быстрых заключений :)
    дай код посмотреть? и покажи в нём что зафиксил
     
  16. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    leeloo
    в принципи, вообще-то, переменная может находиться в адресном
    пространстве функции, но это явно не твой случай.
    просто пихается она в код и делаеться обводящий джамп, и
    если она не RO, то и аттрибуты памяти подправить надо - или
    в PE заголовке или через VirtualProtect(....)

    дай код посмотреть? и покажи в нём что зафиксил
     
  17. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    По "исходнику" видно, что SendBytes и wsa_buf объявлены в секции кода, а значит read_only, отсюда и ошибка
     
  18. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    leo
    он мог просто между ними(секциями) подтереть код и многточие не поставить...
    пусть весь даёт :)
     
  19. Colibri

    Colibri New Member

    Публикаций:
    0
    Регистрация:
    8 май 2008
    Сообщения:
    117
    leeloo
    добавь в параметры линкера:
    /section:.text,EWR
     
  20. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Colibri
    а аверы как на такую примочку среагируют ?
    секция EW???
    если ему для себя - то прокатит ;")