Ошибка привязки при воссоздании сокета

A имеют следующий сокет слушателя:

int sd = socket(PF_INET, SOCK_STREAM, 0);

struct sockaddr_in addr;
bzero(&addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(http_port);
addr.sin_addr.s_addr = INADDR_ANY;

if(bind(sd,(sockaddr*)&addr,sizeof(addr))!=0)
{
    ...
}

if (listen(sd, 16)!=0)
{
    ...
}

int sent = 0;
for(;;) {
    int client = accept(sd, (sockaddr*)&addr, (socklen_t*)&size);
    if (client > 0)
    {
        ...
        close(client);
    }
}

Если вы используете

close(sd);

и затем пытаетесь воссоздать сокет с тем же кодом, возникает ошибка привязки, и только через 30-60 секунд создается новый сокет

Есть ли способ создать или закрыть каким-то классным способом, чтобы избежать ошибки привязки?

12
задан spe 8 April 2011 в 08:53
поделиться