Добрый день. пишу свой 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 подскажите где лежат грабли?
Вообще-то у recvfrom прототип такой: Код (Text): ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen); Т.е. fromlen должен быть указателем.
на Си написал: ... 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 - ошибок не дает флаги такие как писал на Си (я всё еще учусь писать на асме )