2000-04-13 09:19:23 +00:00
|
|
|
/*
|
|
|
|
* Write "n" bytes to a descriptor. Use in place of write() when fd is a
|
|
|
|
* stream socket.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/* Stolen from Stevens' book */
|
|
|
|
|
|
|
|
#include "echoping.h"
|
|
|
|
|
|
|
|
int
|
2007-03-05 20:52:20 +00:00
|
|
|
writen(fd, ptr, nbytes)
|
|
|
|
register int fd;
|
|
|
|
register char *ptr;
|
|
|
|
register int nbytes;
|
2000-04-13 09:19:23 +00:00
|
|
|
{
|
2007-03-05 20:52:20 +00:00
|
|
|
int nleft, nwritten;
|
2000-04-13 09:19:23 +00:00
|
|
|
|
2007-03-05 20:52:20 +00:00
|
|
|
nleft = nbytes;
|
|
|
|
while (nleft > 0) {
|
|
|
|
nwritten = write(fd, ptr, nleft);
|
|
|
|
if (nwritten <= 0)
|
|
|
|
return (nwritten); /* error */
|
|
|
|
/* Some systems, such as Digital's OSF1 (Digital Unix) doesn't set
|
|
|
|
* the returned value to -1, even when interrupted by an alarm,
|
|
|
|
* whatever says the documentation. errno is not set. */
|
|
|
|
if ((nwritten < nleft) && timeout_flag)
|
|
|
|
return nwritten;
|
|
|
|
nleft -= nwritten;
|
|
|
|
ptr += nwritten;
|
|
|
|
}
|
|
|
|
return (nbytes - nleft);
|
2000-04-13 09:19:23 +00:00
|
|
|
}
|