Gniazda, serwer z możliwościa obsługi wielu kientów
  Home FAQ Contact Sign in
pl.comp.os.linux.programowanie only
 
Advanced search
POPULAR GROUPS

more...

pl.comp.os.linux.programowanie Profile…
 Up
Gniazda, serwer z możliwościa obsługi wielu kientów         


Author: tomekD
Date: Sep 19, 2008 04:15

Mimo że poniższa funkcja jest kropka w kropkę przepisana z książki o
programowaniu w linuxie to jest w niej błąd. W w pętli for, gdy
następuje sprawdzenie czy deskryptor jest gotowy a następnie jeżeli
to deskryptor gniazdowy stara się zaakceptować połączenie
przychodzące. I tutaj jest problem, prawdopodobnie po użyciu SELECT
funkcja ACCEPT nie blokuje, i zwraca -1 jeżeli nikt nie chcę się
połączyć. W tej funkcji nie jest to uwzględnione i z tego powodu może
się pojawić BŁĄD SEGMENTACJI gdy przekaże fd_client(-1) do makra
FD_SET. Myślałem żeby wywoływać w pętli funkcję ACCEPT dopóki nie
zwróci deskryptora ale czy to jest dobre rozwiązanie?. Czy ta funkcja
jest ok?
char run_server(struct sockaddr_un *sap)
{
int fd_skt,fd_client,fd_hwm = 0, fd;
char buf[100];
fd_set set , read_set;
size_t nread...
Show full article (1.66Kb)
6 Comments
Re: Gniazda, serwer z możliwościa obsługi wielu kientów         


Author: Rafal
Date: Sep 20, 2008 09:54

tomekD pisze:
> Myślałem żeby wywoływać w pętli funkcję ACCEPT dopóki nie
> zwróci deskryptora ale czy to jest dobre rozwiązanie?. Czy ta funkcja
> jest ok?

Jeśli funkcja accept zwraca -1 to znaczy że wystąpił jakiś błąd.
Wypisz ten błąd (printf("accept: %%s\n", strerror(errno))) i niech się
robi znowu select(). Nie wywołuj w pętli accept bo się zablokujesz
na tym accept.

--
Rafał
no comments
Re: Gniazda, serwer z możliwościa obsługi wielu kientów         


Author: tomekD
Date: Sep 21, 2008 04:25

Tak, błąd to invalid argument, sprawdzałem co zwracaja BIND i LISTEN,
no i sie okazało że -1. Co może być powodem. Funkcja SOCKET zwraca
prawidłowy deskryptor.
no comments
Re: Gniazda, serwer z możliwościa obsługi wielu kientów         


Author: tomekD
Date: Sep 21, 2008 04:28

On 21 Wrz, 13:25, tomekD gmail.com> wrote:
> Tak, błąd to invalid argument, sprawdzałem co zwracaja BIND i LISTEN,
> no i sie okazało że -1. Co może być powodem. Funkcja SOCKET zwraca
> prawidłowy deskryptor.
Ano tak, za któryms razem nie usunałem pliku gniazdowego i to psuło
program. Dzieki.
no comments
Re: Gniazda, serwer z możliwościa obsługi wielu kientów         


Author: tomekD
Date: Sep 21, 2008 05:09

Invalid Argument, powodem tego jest błąd w funkcji BIND "Addres
already in use", dziwne bo zawsze na początku daje
unlink(nazwaSocketa);.
no comments
Re: Gniazda, serwer z możliwościa obsługi wielu kientów         


Author: tomekD
Date: Sep 21, 2008 05:29

On 21 Wrz, 14:09, tomekD gmail.com> wrote:
> Invalid Argument, powodem tego jest błąd w funkcji BIND "Addres
> already in use", dziwne bo zawsze na początku daje
> unlink(nazwaSocketa);.

Nie wiem czy to wina mojego OS, (Ubuntu) , ale gdy skróciłem nazwy
socketów wszystko zaczeło grać. Okazało sie że gdy nazwałem go dajmy
na to Socket1 to w katalogu po zakonczeniu programu zostawal plik
'So', dlatego funkcja unlink nie mogła usunac pliku Socket1 bo go
zwyczajnie tam nie było. Teraz używam krótszych nazw jest ok.
no comments
Re: Gniazda, serwer z możliwościa obsługi wielu kientów         


Author: Rafal
Date: Sep 21, 2008 07:16

tomekD pisze:
> On 21 Wrz, 14:09, tomekD gmail.com> wrote:
>> Invalid Argument, powodem tego jest błąd w funkcji BIND "Addres
>> already in use", dziwne bo zawsze na początku daje
>> unlink(nazwaSocketa);.
>
> Nie wiem czy to wina mojego OS, (Ubuntu) , ale gdy skróciłem nazwy
> socketów wszystko zaczeło grać. Okazało sie że gdy nazwałem go dajmy
> na to Socket1 to w katalogu po zakonczeniu programu zostawal plik
> 'So', dlatego funkcja unlink nie mogła usunac pliku Socket1 bo go
> zwyczajnie tam nie było. Teraz używam krótszych nazw jest ok.

Ach, no tak. W wołaniu bind trzecim parametrem nie powinno być
0 tylko sizeof(struct sockaddr_un).

--
Rafał
no comments