Libc stream-y a sockety.

Peter Stibrany pstibrany na nocomment.sk
Pondělí Srpen 9 13:18:40 CEST 1999


Ahoj.

Pisem program, v ktorom pouzivam Unix sokety a streamy z
libc. Je to jednoduchy klient/server. Cele to funguje az na
jeden zvlastny stav. Ked klientovi pustim vstup nie z
terminalu, ale zo suboru (klient < fajl), tak klient posle
naraz cely vstup serveru.
Server cita svoj vstup po riadkoch  cez 
fgets(buffer, velkost, f); kde f je otvoreny unix soket cez
fdopen.
Server nacita jeden riadok a podla prveho slova spravi
nejaku cinnost. Vacsinou da klientovi odpoved v style
+OK/-ERR. Akonahle vsak server posle nejake data pre klienta 
na otvoreny soket, tak sa vstupny buffer pre dany soket
vyprazdni. Toto nie je problem, ked klient neposiela
vsetky data naraz, pretoze v takom pripade je dany buffer
aj tak prazdny. Ked vsak klient posle vsetok vstup naraz 
(ako som napisal hore), tak v podstate pridem o zvysok
vstupu a to by som veru nechcel.

Nestretli ste sa s danym problemom? Mam glibc 2.0.7
(balik libc6-2.0.7.19981211-6.deb, ten co je standardne v
Slinku). Socket mam otvoreny cez accept() -> fdopen(fd, "w+");

Skusil som urobit to iste, iba som dvojicu accept/fdopen
zamenil za fopen(fajl, "w+"); Pri prvom fgets som dostal
NULL. Ked som zamenil "w+" za "r+", pri soketoch som dostal
rovnaky vysledok ako predtym.

Peter -Cipso- Stibrany



Další informace o konferenci Linux