LINUX.ORG.RU

socket bind close


0

0

Создаю сокет, биндю, закрываю, перезапускаю программу и получаю:
bind(): Address already in use

Неужели недостаточно просто закрывать сокет ? Сокет ТОЧНО закрывается, именно его дескриптор, все работает как часы !

anonymous

Ответ на: комментарий от anonymous

Вообщем спасибо, кому надо пользуйтесь таким кодом перед bind():

sock_listen = socket (AF_INET, SOCK_STREAM, 0);
if (sock_listen == -1)
{
printf ("ERROR[socket()]: %s\n", strerror(errno));
return;
}

int sock_opt = 1;
if (setsockopt(sock_listen, SOL_SOCKET, SO_REUSEADDR, &sock_opt, sizeof(sock_opt)) == -1)
{
printf ("ERROR[setsockopt()]: %s\n", strerror(errno));
return;
}

anonymous
()
Ответ на: комментарий от anonymous

> А из-за чего возникает необходимость в этом ?

ну там же _все_ написано?

idle ★★★★★
()
Ответ на: комментарий от anonymous

Сразу после закрытия соединение переходит в состояние TAIM_WAIT поэтому и необходимо ставить этот флаг это нормально. Чтобы без этого флага прибиндить порт он должен находиться в состоянии CLOSED

anonymous
()
Ответ на: комментарий от anonymous

А может надо сделать чтобы при вопросе со словом socket автоматически постился ответ со ссылкой на UNIX socket FAQ?

asso_w
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.