![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
jan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.5.2004 Репутация: нет Всего: нет |
Этим кодом я окрываю сокет, назначаю ему порт....
........................... #include "winsock.h" #pragma comment(lib,"Ws2_32.lib") .................. SOCKET sServ; sockaddr_in addr; int err; .................. sServ = socket(AF_INET, SOCK_STREAM, 0); addr.sin_family=AF_INET; addr.sin_port=htons(NumPort); addr.sin_addr.s_addr=htonl(INADDR_ANY); if (bind(sServ, (LPSOCKADDR)&addr, sizeof(addr))== SOCKET_ERROR) { err=WSAGetLastError(); MessageBox(NULL, "Listenning Port (TCP) - Error", "KURSAVI", MB_OK); } else { listen(sServ, 1000); MessageBox(NULL, "Listenning Port (TCP) - Listen ", "KURSAVI", MB_OK); } -----------------------------------------------------------------------------------------! !однако возникла проблема, как закрыть сокет вместе с ассоциированным на него портом??? ! ! ! !ГЛАВНОЕ освободить этот порт.... ! -----------------------------------------------------------------------------------------! функция closesocket(sServ) не помогает. Все делаю типа так... sServ = socket(AF_INET, SOCK_STREAM, 0); addr.sin_family=AF_INET; addr.sin_port=htons(NumPort); addr.sin_addr.s_addr=htonl(INADDR_ANY); if (bind(sServ, (LPSOCKADDR)&addr, sizeof(addr))== SOCKET_ERROR) { //может сюда что надо добавить???? //пробовал shutdown(,...), однако второй параметр какойто хитрый не поддается //воприятию, не знаю что делать. closesocket(sServ); err=WSAGetLastError(); MessageBox(NULL, "Listenning Port (TCP) - is Closed now", "KURSAVI", MB_OK); } else { closesocket(sServ); MessageBox(NULL, "Listenning Port (TCP) - was Closed later", "KURSAVI", MB_OK); } Помогите пожалуйста. |
|||
|
||||
jan |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 19.5.2004 Репутация: нет Всего: нет |
Не работает shutdown.
Вот поробовал вычитав с мсдэнки, однако не идет.(закрытие сокета и освобождение порта под него) //зактрываю сокет и освобождаю занятое под него. if (bind(sServ, (LPSOCKADDR)&addr, sizeof(addr))== SOCKET_ERROR) { WSAAsyncSelect(sServ, NULL, 0,FD_CLOSE); shutdown(sServ, SD_SEND); //Ругается на SD_SEND вообщем пишет ошибку. // error C2065: 'SD_BOTH' : undeclared identifier //Error executing cl.exe. closesocket(sServ); err=WSAGetLastError(); MessageBox(NULL, "Listenning Port (TCP) - is Closed now", "KURSAVI", MB_OK); return 0; } Помогите пожалуйста курсач горит. Вот как это напісано в МСДН. To assure that all data is sent and received on a connected socket before it is closed, an application should use shutdown to close connection before calling closesocket. For example, to initiate a graceful disconnect: Call WSAAsyncSelect to register for FD_CLOSE notification. Call shutdown with how=SD_SEND. When FD_CLOSE received, call recv until zero returned, or SOCKET_ERROR. Call closesocket. Note The shutdown function does not block regardless of the SO_LINGER setting on the socket. Что такое и где определяется SO_LINGER сокет? |
|||
|
||||
ViGOur |
|
|||
Unregistered |
1. SO_LINGER тебе не нужен!
2. Для того, чтобы компилятор знал что такое SD_BOTH подключи #include "winsock.h". 3. С чего ты решил что он не закрывается? Просто как я понял он находится в состоянии TIME_WAIT, так как вовремя не получил пакет FIN, по тем или иным причинам. Но это легко лечится:
Благодаря данным двум строчкам, ты сможешь использовать порт если он находится в состоянии TIME_WAIT!!! Надеюсь что на этом все! ![]() |
|||
|
||||
ViGOur |
|
|||
Unregistered |
Немного ошибся не #include <winsock.h>, а #include <winsock2.h>!
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |