Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

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

6.8K
20 мая 2004 года
jan
4 / / 19.05.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);
}


Помогите пожалуйста.
6.8K
21 мая 2004 года
jan
4 / / 19.05.2004
Цитата:
Originally posted by jan
Этим кодом я окрываю сокет, назначаю ему порт....
...........................
#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);
}


Помогите пожалуйста.


Не работает 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 сокет?

2.0K
22 мая 2004 года
yup
31 / / 03.12.2002
попробуй

char opt = 1;

if (setsocketopt (sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof (opt)) == -1) {
perror ("setsockopt");
return (false);
}
7.8K
03 июня 2004 года
Laco
1 / / 03.06.2004
Попробуй так :
Цитата:
shutdown(sServ,SD_BOTH);
closesocket(sServ);

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог