Крушение при закрытие и очистке сокета.

Тема в разделе "WASM.BEGINNERS", создана пользователем lust, 8 мар 2008.

  1. lust

    lust New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2007
    Сообщения:
    72
    Проблема в том, программа работает нормально, сообщение при соединении выводит, но когда invoke Sleep, 10000 истекает, она рушится. Никак не могу понять от чего, вроде всё правмильно закрывается. спасибо.

    Код (Text):
    1.     .486
    2.     .model flat,stdcall
    3.     option casemap:none
    4.  
    5. include c:\masm32\include\windows.inc
    6. include c:\masm32\include\user32.inc
    7. include c:\masm32\include\kernel32.inc
    8. include c:\masm32\include\wsock32.inc
    9. include c:\masm32\include\comctl32.inc
    10.  
    11. includelib c:\masm32\lib\user32.lib
    12. includelib c:\masm32\lib\kernel32.lib
    13. includelib c:\masm32\lib\comctl32.lib   ; подключение библиотеки common controls
    14. includelib c:\masm32\lib\wsock32.lib
    15. .data
    16. wsaError    db "CONNECTED!",0
    17. NProg       db "CONNECTED!",0
    18. Hello       db "CONNECTED!",0
    19. CommandLine dd  ?
    20. hSocket2    dd  ?
    21. hClient     dd  ?
    22. Connected   db  0
    23. client      dd  ?
    24. sock        dd ?
    25. Port        dd 3030
    26. wsa         WSADATA <?>; структура данных для сети...cм. windows.inc
    27. sin         sockaddr_in <?> ; -.-.-
    28. .const
    29.  
    30. ; #########################################################################
    31. ; опpеделяем дополнительное Windows-сообщение (любой номер от WM_USER и выше)
    32. WM_SOCKET   equ WM_USER + 100
    33. AF_INET     equ  2     ; интернет (используется чаще всего)
    34. SOCK_STREAM     equ  1   
    35. ; #########################################################################
    36.  
    37. .code
    38. ; макрос - обнуляет старшее слово в DWORD (eax), оставляя младшее...
    39. LOWORD  MACRO bigword  
    40.     mov eax, bigword
    41.     and eax, 0FFFFh
    42.     ENDM
    43. ; макрос - сдвигает старшее слово в DWORD (eax) в младшие разряды (ax)...
    44. HIWORD  MACRO bigword
    45.     mov eax, bigword
    46.     shr eax, 16
    47.     ENDM
    48. start:
    49. invoke WSAStartup, 101h, addr wsa   ; инициализация  WINSOCK DLL v1.1
    50.             .if eax == NULL ; если успешно
    51.                 invoke GetCommandLine       ; получить адрес командной строки - не используется
    52.                 mov    CommandLine, eax     ;
    53.             .endif
    54. invoke socket, AF_INET, SOCK_STREAM,0               ; тип протокола (не устанавливать никакого пpотокола: 0)
    55.             .if eax != INVALID_SOCKET       ; если нет ошибки
    56.                 mov hSocket2, eax       ; запомнить хендл
    57.             .else
    58.                 invoke MessageBox, NULL, addr wsaError, addr NProg, MB_OK + MB_ICONSTOP
    59.             .endif
    60. invoke htons, Port
    61.             mov sin.sin_port, ax
    62.             mov sin.sin_family, AF_INET
    63.             mov sin.sin_addr, INADDR_ANY
    64. invoke bind, hSocket2, addr sin, sizeof sin
    65.             .if eax == SOCKET_ERROR
    66.                 invoke MessageBox, NULL, addr wsaError, addr NProg, MB_OK + MB_ICONSTOP
    67.             .endif
    68. invoke listen, hSocket2, 5
    69.             .if eax == SOCKET_ERROR
    70.                 invoke MessageBox, NULL, addr wsaError, addr NProg, MB_OK + MB_ICONSTOP
    71.             .endif
    72. .while Connected != 1  
    73.     .IF ax == NULL
    74.         ; При соединении инициализируем сокет и отправим клиенту строку
    75.         invoke accept,hSocket2,0,0
    76.         mov client,eax
    77.         invoke send,client,addr Hello,sizeof Hello,0
    78.         invoke Sleep,10
    79.         mov Connected, 1
    80. .ENDIF
    81. .endw
    82.  
    83. invoke MessageBox, NULL, addr wsaError, addr NProg, MB_OK + MB_ICONSTOP;           
    84. invoke Sleep, 10000
    85. invoke closesocket, hSocket2
    86. invoke WSACleanup
    87. end start
     
  2. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    А где ExitProcess ? :P
     
  3. lust

    lust New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2007
    Сообщения:
    72
    а слона-то я и не приметил =)

    Правда тут сразу встаёт другой вопрос ужасающий..
    А почему проги другие какие я писал без exitprocess не рушились?
     
  4. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    701
    Вазможно
    ret был

    Или опкод был в конце секции егошний типа данные какие или что
     
  5. lust

    lust New Member

    Публикаций:
    0
    Регистрация:
    14 окт 2007
    Сообщения:
    72
    точно, там спрятался ret.
    спсасибо, что просветили =)