programovanie TCP/IP

Juraj Kovac domcek na domcek.sk
Pondělí Leden 5 03:47:45 CET 1998


Ahojte.
Prave pisem nejaky server, ktory komunikuje s klientom UDP protokolom, a
od isteho casu, neviem z akeho dovodu, dochadza k nejakemu problemu v
komunikacii, a tak by som sa Vas chcel spytat, ci Vas nenapada, v com by
to mohlo byt:
Ak spustim server v popredi, na kontrolnom terminali, vsetko ide normalne,
avsak ak ho spustim v pozadi pomocou if (fork()) exit(0), nastava tento
problem:
klient posle serveru paket, sendto()
server ho v poriadku prijme, recvfrom()
server sa snazi poslat odpoved, ale funkcia sendto() vracia hodnotu -1 a
hodnota errno je 133 (Transport endpoint is already connected)
Pri druhom a dalsich pokusoch poslat paket serveru uz klient vracia
chybovu hlasku vo funkcii recvfrom: connection refused

komunikacna cast vyzera asi takto:

int s;
struct sockaddr_in from;
char *buf;
sockaddr *client;

s = socket(AF_INET, SOCK_DGRAM, 0);
bzero((caddr_t)&from, sizeof(from));
from.sin_port = ntohs(49);
bind(s, (struct sockaddr *)&from, sizeof(from));
fromlen = sizeof(from);
c = recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr *)&from, &fromlen);
...
sendto(s, buf, SIZE, 0, client, sizeof(struct sockaddr_in));

Vopred velka vdaka, ak by niekoho nieco napadlo :)

    |       on irc        / ========================+=====================\
 ___| ___  _ _  ___  ___ (      domcek na domcek.sk    |  Koliskova 6, BA     \
|   )|   )| | )|    |___)|___)  juraj.kovac na netax.sk|  tel. (07) 711 595   /
|__/ |__/ |  / |__  |__  | \  ======================+=====================/                                      



Další informace o konferenci Linux