ip/torrent: simplify
This commit is contained in:
parent
3997c57b57
commit
326c8d9c42
1 changed files with 11 additions and 25 deletions
|
@ -627,7 +627,7 @@ server(void)
|
||||||
void
|
void
|
||||||
client(char *ip, char *port)
|
client(char *ip, char *port)
|
||||||
{
|
{
|
||||||
static Dict *peers, *peerqh, *peerqt;
|
static Dict *peerqh, *peerqt;
|
||||||
static QLock peerslk;
|
static QLock peerslk;
|
||||||
static int nprocs;
|
static int nprocs;
|
||||||
char *addr;
|
char *addr;
|
||||||
|
@ -640,7 +640,7 @@ client(char *ip, char *port)
|
||||||
d = mallocz(sizeof(*d) + 64, 1);
|
d = mallocz(sizeof(*d) + 64, 1);
|
||||||
snprint(addr = d->str, 64, "tcp!%s!%s", ip, port);
|
snprint(addr = d->str, 64, "tcp!%s!%s", ip, port);
|
||||||
qlock(&peerslk);
|
qlock(&peerslk);
|
||||||
if(dlook(peers, addr) || dlook(peerqh, addr)){
|
if(dlook(peerqh, addr)){
|
||||||
qunlock(&peerslk);
|
qunlock(&peerslk);
|
||||||
free(d);
|
free(d);
|
||||||
return;
|
return;
|
||||||
|
@ -661,31 +661,18 @@ client(char *ip, char *port)
|
||||||
if(rfork(RFFDG|RFPROC|RFMEM|RFNOWAIT))
|
if(rfork(RFFDG|RFPROC|RFMEM|RFNOWAIT))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
d = nil;
|
|
||||||
for(;;){
|
for(;;){
|
||||||
qlock(&peerslk);
|
qlock(&peerslk);
|
||||||
if(d){
|
/* dequeue and put to tail */
|
||||||
Dict **dd;
|
|
||||||
/* remove from peers list */
|
|
||||||
for(dd = &peers; *dd; dd = &((*dd)->next))
|
|
||||||
if(*dd == d){
|
|
||||||
*dd = d->next;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
/* enqueue to back */
|
|
||||||
d->next = nil;
|
|
||||||
if(peerqt == nil)
|
|
||||||
peerqh = d;
|
|
||||||
else
|
|
||||||
peerqt->next = d;
|
|
||||||
peerqt = d;
|
|
||||||
}
|
|
||||||
/* dequeue and put in peer list */
|
|
||||||
if(d = peerqh){
|
if(d = peerqh){
|
||||||
if((peerqh = d->next) == nil)
|
if((peerqh = d->next) == nil)
|
||||||
peerqt = nil;
|
peerqt = nil;
|
||||||
d->next = peers;
|
d->next = nil;
|
||||||
peers = d;
|
if(peerqt)
|
||||||
|
peerqt->next = d;
|
||||||
|
else
|
||||||
|
peerqh = d;
|
||||||
|
peerqt = d;
|
||||||
} else
|
} else
|
||||||
nprocs--;
|
nprocs--;
|
||||||
qunlock(&peerslk);
|
qunlock(&peerslk);
|
||||||
|
@ -694,11 +681,10 @@ client(char *ip, char *port)
|
||||||
addr = d->str;
|
addr = d->str;
|
||||||
if(debug) fprint(2, "client %s\n", addr);
|
if(debug) fprint(2, "client %s\n", addr);
|
||||||
if((fd = dial(addr, nil, nil, nil)) >= 0){
|
if((fd = dial(addr, nil, nil, nil)) >= 0){
|
||||||
if(!peer(fd, 0, addr))
|
peer(fd, 0, addr);
|
||||||
d = nil;
|
|
||||||
close(fd);
|
close(fd);
|
||||||
}
|
}
|
||||||
if(d) sleep(1000+nrand(5000));
|
sleep(1000+nrand(5000));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue