не пойму ошибку в recvfrom

Тема в разделе "WASM.WIN32", создана пользователем h0kum, 26 май 2006.

  1. h0kum

    h0kum New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2003
    Сообщения:
    47
    Добрый день.

    пишу свой TFTP сервак. часть кода:

    invoke WSAStartup,00010001h,offset wsa

    invoke socket,AF_INET,SOCK_DGRAM,0

    mov sock,eax

    invoke htons, port

    mov sin.sin_port, ax

    mov sin.sin_family, AF_INET

    mov sin.sin_addr, INADDR_ANY

    invoke bind,sock,addr sin, sizeof sin

    @jmp1:

    invoke recvfrom,sock, addr buf,517, 0,addr rs,sizeof rs

    invoke WSAGetLastError

    ...

    jmp @jmp1



    ну вот после recvfrom выдается ошибка, и описание такое:

    The buf or from parameters are not part of the user address space, or the fromlen argument is too small to accommodate the peer address.

    в отладчике смотрел, вроде все нормально

    sizeof rs - 10h

    подскажите где лежат грабли?
     
  2. h0kum

    h0kum New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2003
    Сообщения:
    47
    sin sockaddr_in <0> ; -.-.-

    rs sockaddr_in <0>
     
  3. slow

    slow New Member

    Публикаций:
    0
    Регистрация:
    27 дек 2004
    Сообщения:
    615
    а что с buf?
     
  4. h0kum

    h0kum New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2003
    Сообщения:
    47
    buf DB 517 DUP (?)
     
  5. Bert

    Bert New Member

    Публикаций:
    0
    Регистрация:
    11 май 2005
    Сообщения:
    20
    Адрес:
    Russia
    Вообще-то у recvfrom прототип такой:


    Код (Text):
    1.  
    2. ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
    3.  




    Т.е. fromlen должен быть указателем.
     
  6. h0kum

    h0kum New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2003
    Сообщения:
    47
    на Си написал:

    ...

    len = sizeof(struct sockaddr);

    count=recvfrom(sock,buf,517,0,(struct sockaddr *)&from_addr, &len);

    ...

    работает, переписал на асме:

    ...

    mov len,sizeof sin_from

    invoke recvfrom,sock, addr buf,516, 0,addr sin_from,addr len

    ...

    The socket has not been bound with bind, or an unknown flag was specified, or MSG_OOB was specified for a socket with SO_OOBINLINE enabled, or (for byte stream style sockets only) len was zero or negative.

    bind - ошибок не дает

    флаги такие как писал на Си



    (я всё еще учусь писать на асме :dntknw: )
     
  7. h0kum

    h0kum New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2003
    Сообщения:
    47
    вопрос снимается

    размер len указал как DB а надо было DD