Подскажите плз, нигде найти не могу mov [esi].sin_family, AF_INET and [esi].sin_port, 0 mov [esi].sin_addr, INADDR_ANY invoke bind, [lsock], esi, sizeof sockaddr_in При этом система сама выбирает где открыть порт. Как мне узнать где она его открыла?
Код (Text): .data szSockaddr_in dd 16 .code start proc local sock:dword local sin:sockaddr_in local wsadata:WSADATA local port[16]:byte invoke WSAStartup,00000202h,addr wsadata invoke socket,02h,01h,00h mov sock,eax mov sin.sin_port,0 mov sin.sin_family,02h mov sin.sin_addr,000000000h invoke bind,sock,addr sin,16 invoke getsockname,sock,addr sin,offset szSockaddr_in mov ax,sin.sin_port xchg ah,al invoke wsprintfA,addr port,$CTA0("%i"),eax invoke MessageBoxA,0,addr port,addr port,0 invoke closesocket,sock invoke WSACleanup invoke ExitProcess,0 start endp end start
Код (Text): and [esi].sin_port,0 ;тут ошибка если пишешь 0 - система сама назначает первый свободный порт
netw0rm Вызовай пока ненайдеш свободный, вероятость что будет болше двух вызовав очень маленикая. Зато меньше кода писать. mov saddr.sin_family, AF_INET mov saddr.sin_addr, INADDR_ANY @@: invoke GetTickCount mov saddr.sin_port, ax invoke bind, [lsock], addr sockaddrin, sizeof sockaddr_in test eax, eax jz @b
Палка на 2-х концах С одной стороны "надежное" программирование с другой "красивое". ну тут 2 beer or not.. . вспоминается
bober Зачем изобретать велосипед, раз сама Windows назначит порт? К тому же такой перебор в цикле работает долго и жрет ресурсы