Добрый день. Пишу простой серверок в dll, который принимает символы и выводит из в StdOut. Лодер для этой dll - ка выглядит так: Код (Text): .code main: ;==========================Грузим DLL первый раз== invoke LoadLibrary,addr szFilename; serv.dll mov hInstance,eax .if (!eax) xor eax,eax mov eax, -1 ret .endif invoke GetProcAddress,hInstance,addr szLoad mov pLoad,eax invoke GetProcAddress,hInstance,addr szUnLoad mov pUnLoad,eax call dword ptr [pLoad] pushad invoke wsprintf,addr TextBuf,addr template,eax invoke StdOut,addr TextBuf popad invoke StdIn, addr input_buffer, 1 ; Тут с dll работает клиент invoke FreeLibrary,hInstance ; Выгрузим dll invoke Sleep,5000 ;============================Грузим DLL второй раз== invoke LoadLibrary,addr szFilename mov hInstance,eax .if (!eax) xor eax,eax mov eax, -1 ret .endif invoke GetProcAddress,hInstance,addr szLoad mov pLoad,eax invoke GetProcAddress,hInstance,addr szUnLoad mov pUnLoad,eax call dword ptr [pLoad] ; ----> Тут получаем ошибку "Порт занят!" pushad invoke wsprintf,addr TextBuf,addr template,eax invoke StdOut,addr TextBuf popad invoke Sleep,5000 ;================================================= invoke ExitProcess,0 end main Результат второй попытка занять порт... Сам serv.dll Код (Text): .code ;-------------------------------------------------------------- DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved:DWORD mov eax,TRUE ret DllEntry Endp ;-------------------------------------------------------------- Load proc pcallback:DWORD invoke CreateThread, 0, 0, addr Shelld, 0, 0, 0 mov hThread, eax lea eax, szPlugLoad ret Load endp ;-------------------------------------------------------------- Unload proc invoke CloseHandle, hThread invoke Sleep, 1000 lea eax, szPlugUnLoad ret Unload endp ;-------------------------------------------------------------- ;========================================================= ShellClient proc dwSock:dword local buffer[128]:byte local flag:dword mov flag,1 invoke StdOut, addr szCliConnected invoke RtlZeroMemory,addr buffer,128 .while flag @@: invoke recv, dwSock, addr buffer, sizeof buffer, 0 .if eax == SOCKET_ERROR || eax == 0 invoke StdOut, addr szErrorRecv jmp _exit .endif lea esi,buffer cmp dword ptr [esi],'tixe';exit je _exit invoke StdOut, ADDR buffer invoke RtlZeroMemory,addr buffer,128 jmp @B @@: _exit: mov flag,0 invoke StdOut, addr szCliDisConnected invoke closesocket, dwSock .endw ret ShellClient endp ;========================================================= Shelld proc hInst:DWORD local SockAddrIn:sockaddr_in local ServerSocket:dword local ClientSocket:dword local WSAData:WSADATA local dwMode:dword invoke WSAStartup, 101h, addr WSAData .if eax!=NULL invoke StdOut, addr szErrorWSAStartup ret .endif invoke socket, PF_INET, SOCK_STREAM, 0 .if eax==INVALID_SOCKET invoke StdOut, addr szErrorSocket invoke WSAGetLastError ret .endif mov ServerSocket, eax invoke wsprintf,addr TextBuf,addr template,PORT invoke StdOut,addr TextBuf mov SockAddrIn.sin_family, AF_INET invoke htons, PORT mov SockAddrIn.sin_port, ax mov SockAddrIn.sin_addr, INADDR_ANY invoke bind, ServerSocket, addr SockAddrIn, sizeof SockAddrIn mov dwMode, 0 invoke ioctlsocket,ServerSocket, FIONBIO, addr dwMode ; Ждем подключений invoke listen,ServerSocket, SOMAXCONN .if eax != 0 invoke StdOut, addr szErrorListen invoke WSAGetLastError int 3 ret .endif invoke StdOut, addr szConnected .while TRUE invoke accept,ServerSocket, addr SockAddrIn, 0 .if eax != INVALID_SOCKET mov ClientSocket, eax invoke ShellClient, ClientSocket .else invoke StdOut, addr szErrorAccept .continue .endif invoke Sleep, 1000 .endw invoke shutdown, ServerSocket, SD_BOTH invoke closesocket, ServerSocket invoke WSACleanup ret Shelld endp ;========================================================= End DllEntry Вопрос что мне нужно прописать в serv.dll чтобы при выгрузке dll порт (6699) закрывался быстро? Спасибо. Все исходники в архиве ...