version 1.63, 2012/04/11 06:05:43 |
version 1.64, 2012/04/11 21:17:32 |
|
|
int |
int |
sock_read(struct sock *f) |
sock_read(struct sock *f) |
{ |
{ |
|
int rc; |
|
|
#ifdef DEBUG |
#ifdef DEBUG |
if (debug_level >= 4) { |
if (debug_level >= 4) { |
sock_dbg(f); |
sock_dbg(f); |
|
|
/* |
/* |
* send pending ACKs, initial positions, initial volumes |
* send pending ACKs, initial positions, initial volumes |
*/ |
*/ |
if (!sock_write(f)) |
f->pipe.file.state |= FILE_WINUSE; |
|
rc = sock_write(f); |
|
f->pipe.file.state &= ~FILE_WINUSE; |
|
if (f->pipe.file.state & FILE_ZOMB) { |
|
file_del(&f->pipe.file); |
|
return 0; |
|
} |
|
if (!rc) |
break; |
break; |
} |
} |
return 1; |
return 1; |
|
|
* wsock. |
* wsock. |
*/ |
*/ |
rp = f->pipe.file.rproc; |
rp = f->pipe.file.rproc; |
if (!rp || !rp->ops->in(rp, NULL)) |
if (!rp) |
break; |
break; |
|
#ifdef DEBUG |
|
if (debug_level >= 4) { |
|
aproc_dbg(rp); |
|
dbg_puts(": in\n"); |
|
} |
|
#endif |
|
if (!rp->ops->in(rp, NULL)) { |
|
break; |
|
} |
} |
} |
f->pipe.file.state &= ~FILE_RINUSE; |
f->pipe.file.state &= ~FILE_RINUSE; |
if (f->pipe.file.wproc == NULL) |
if (f->pipe.file.state & FILE_ZOMB) { |
|
file_del(&f->pipe.file); |
return 0; |
return 0; |
|
} |
} |
} |
return 1; |
return 1; |
} |
} |