Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Проблема с закрытием порта.

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
jan



Зарегистрирован: 19.05.2004
Сообщения: 4

СообщениеДобавлено: Чт Май 20 2004 22:36    Заголовок сообщения: Проблема с закрытием порта. Ответить с цитатой

Этим кодом я окрываю сокет, назначаю ему порт....
...........................
#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);
}


Помогите пожалуйста.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Ersh



Зарегистрирован: 20.01.2004
Сообщения: 107

СообщениеДобавлено: Пт Май 21 2004 09:28    Заголовок сообщения: Ответить с цитатой

CloseHandle
_________________
Анархия - мать порядка!!!!!!!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
jan



Зарегистрирован: 19.05.2004
Сообщения: 4

СообщениеДобавлено: Пт Май 21 2004 19:46    Заголовок сообщения: Ответить с цитатой

Не работает 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 сокет?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Кольт
Гость





СообщениеДобавлено: Сб Май 22 2004 11:54    Заголовок сообщения: Ответить с цитатой

jan писал(а):
Не работает 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;
}





Что такое и где определяется SO_LINGER сокет?


Вызов shutdown() здесь не нужен,т.к он применяется,чтобы закрыть уже установленное соединение,а
используемые соккетом ресурсы он не освобождает.
Здесь же установленного соединения еще нет (оно появиться только после вызова accept() ), поэтому,чтобы
освободить занятые ресурсы здесь достаточно вызова closesocket(sServ).
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...