SOCKET - wznawianie połącznia

0

Witam,

mam pytanie dotyczące socket - a

Załóżmy, że serwer się zrestartował i klient chce połączyć się do niego jeszcze raz, oczywiście nie przerywając swojego działania (wchodzi np. do pętli reconnect i czeka na wznowienie pacy serwera).

Zrobiłem klienta, który wykrywa już ten stan - utraty połączenia - ale wiem już też, że nie mogę użyć ponownie tego samego FD (file descriptior) ale muszę stworzyć od nowa socket i ustanowić nowe połączenie. Ale tego już nie potrafię... Można prosić o pomoc?

Z góry bardzo dziękuję!

0

W sensie, ze umiesz sie polaczyc z serwerem, sprawdzic czy polaczenie zostalo utracone, ale nie umiesz sie z nim polaczyc? lol
Skoro musisz miec nowy fd to go po prostu stworz od nowa.
edit: co ja pisze ;d

void rec(int*);

int main()
{
    // blablabla
    int fd;
    fd = socket();
    connect(fd, ...);
    if(lost) rec(&fd);
    
    // blablabla
    return 0;
}

void rec(int* fd)
{
    *fd = socket();
    connect(*fd, ...)
}
0

No w sumie tak. umiem się połączyć ale tylko raz :)
Ale nie wiem czy do końca się zrozumieliśmy...

Na początku tworzę deskryptor fd, który używam dalej w programie (nie w funkcji).

Gdy zerwie się połączanie to nie mogę go zamknąć close(fd) i otworzyć od nowa fd = socket(...
bo pojawi się błąd "Bad file descriptor"

Czyli jak stworzyć funkcję tworzącą socket i wznawiającą połączenie, która zwróci mi fd w programie.
Oczywiście, żeby mogła wielokrotnie być wywoływana bez zwrócenia błędu "Bad file descriptor"

0

ja kiedys jak pisalem cos takiego to zapetlalem przed tworzeniem gniazda i wrazie problemu z polaczeniem lecial na nowo. pewnie nie jest to dobre rozwiazanie ale dzialalo.

1 użytkowników online, w tym zalogowanych: 0, gości: 1