Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> udp close, udp close 
:(
    Опции темы
ushakofff
Дата 27.11.2009, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 29.4.2007

Репутация: нет
Всего: нет



Проблема в следующем: при закрытии сокета close возвращает 0, но netstat показывает что сокет не закрылся, что может быть? Просто прога досталась по наследству и она просто огромная что происходит с дескриптором отследить очень сложно. Вот функции открытия и закрытия
Код

int OpenUdpSocket(int port, char *host)
{
    int sockFd;
    struct sockaddr_in   sockAddr;

    /* Open a socket */
    sockFd = socket(AF_INET, SOCK_DGRAM, 0);
    if (sockFd < 0)
    {
        printf("Unable to open socket on port number %d ", port);
        return -1;
    }

    sockAddr.sin_family = AF_INET;

    if (host[0] == '\0')
        sockAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    else
        sockAddr.sin_addr.s_addr = inet_addr(host);

    sockAddr.sin_port = htons(port);

    if (bind(sockFd, (struct sockaddr *)&sockAddr, sizeof(sockAddr)) != 0)
    {
        printf("Bind Failed : udp port %d error - %d '%s' \n", ntohs(sockAddr.sin_port), errno, strerror(errno));
        return -1;
    }

    fcntl(sockFd, F_SETFD, 1);/* close on exec */

    printf("Socket is opened successfuly on the ip %s port %d id %X !!! \n", host, port, sockFd);

    return sockFd;
}

void CloseUdpSocket(int sockFd)
{
    int res = close(sockFd);

    if( res == -1 )
        printf("Close socket Failed : udp port error - %d %d '%s' \n",res, errno, strerror(errno));
    printf("Success socket close : id - %X \n",sockFd);
}


PM MAIL   Вверх
andrew_121
Дата 27.11.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



В Linux, для закрытия сокетов используется close(int fd).
В вендавз, есть что-то типа shutdownsock(int fd).

Добавлено через 1 минуту и 3 секунды
у Вас какая ОС ?


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
ushakofff
Дата 27.11.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 29.4.2007

Репутация: нет
Всего: нет



Я работаю в openSUSE. Да я знаю про shutdown, и пробовал ею заменить close, но тогда прога просто вылетает при ее вызове :(. 

Была мысль что может где то хэндлер дублируется при помощи dup(fd) ... поискал по программе тоже не нашел :(( ума не приложу что может быть.
PM MAIL   Вверх
andrew_121
Дата 27.11.2009, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: нет
Всего: 33



Цитата(ushakofff @  27.11.2009,  16:22 Найти цитируемый пост)
пробовал ею заменить close, но тогда прога просто вылетает при ее вызове

strace выполни. и вывод покажи.

п.с.
наверное правильнее перенести тему в раздел по линухам. да и Максим там чаще появляется.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Олег2005
Дата 29.11.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



В вендавз, есть что-то типа shutdownsock(int fd).

Ну какой-же шатдавн - в UDP???????? 

 И потом - у меня глюк? или вы выкладывали ваш код еще где?
Там в коде был fork() - а после форка родителя - два сокета - у родителя и потомка 

Это сообщение отредактировал(а) Олег2005 - 29.11.2009, 19:15
PM MAIL WWW MSN   Вверх
ushakofff
Дата 30.11.2009, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 29.4.2007

Репутация: нет
Всего: нет



Нет код нигде больше не выкладывал и fork к сожалению тоже нигде не используется ^(

Хотя если Oleg2004 forum.source.ru это ты то там тоже я тебе написал smile

Это сообщение отредактировал(а) ushakofff - 30.11.2009, 08:24
PM MAIL   Вверх
ushakofff
Дата 30.11.2009, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 29.4.2007

Репутация: нет
Всего: нет



Вот парни сделал strace, места где происходит открытие и закрытие пометил:
Inside OpenUdpSocket и Inside CloseUdpSocket чтобы было проще искать!

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  2.txt.gz 255,91 Kb
PM MAIL   Вверх
Олег2005
Дата 30.11.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 421
Регистрация: 26.5.2005
Где: Рига Латвия

Репутация: 6
Всего: 11



ushakofff
Теперь все понятно, где я видел ваш код smile 
Ок, я вам ответил на сорсах в личку.
PM MAIL WWW MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0991 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.