Portál AbcLinuxu, 11. května 2025 10:08
Mám takový problém. Musím napsat semestrálku, aby fungovala v Linuxu. Tak jsem si nainstaloval Ubuntu 10.10 a jsem v něm tedy lama, páč jsem jej používal maximálně na chvilku ve škole.
Mám problém s fungováním vlastního programu v C. Je to program, který učitel předváděl ve škole a fungoval. Tam jedou Debianu, verzi neznám. Doma mi ale při připojení Klienta nahlásí:
a skončí. Zdrojáky serveru i klienta jsem přiložil. Zkoušel jsem to projet i valgrinem:
Neoprávněný přístup do paměti (SIGSEGV)
Server ceka na spojeni...
Pripojen klient 127.0.0.1
Server ceka na spojeni...
Klient poslal = �
Server odesila = �
==20534==
==20534== HEAP SUMMARY:
==20534== in use at exit: 0 bytes in 0 blocks
==20534== total heap usage: 0 allocs, 0 frees, 0 bytes allocated
==20534==
==20534== All heap blocks were freed -- no leaks are possible
==20534==
==20534== For counts of detected and suppressed errors, rerun with: -v
==20534== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 4)
Tedy v paměti to není. Jde o velice triviální prográmek, který jen navazuje spojení a pošle jeden znak. Chci na tom udělat tu semestrálku, ale potřebuji, aby se mi data posílali.
Narazil jsem tam na pár problémů, které by ale segfault způsobit neměly:
<arpa/inet.h>
(nechápu, jak vám s implicitní deklarací inet_ntoa()
mohl jít tcp-fork.c
vůbec přeložit)client_len
a server_len
mají být typu socklen_t
, ne int
Větší problém vidím v tom, že skoro nikde nekontrolujete návratové hodnoty funkcí. Přinejmenším u syscallu accept()
byste to ale udělat měl, protože může být přerušen signálem a pak vrací -1.
Bez informace, kde přesně k tomu problému dochází (viz první odpověď) se ale dál nepohneme.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.