echoping/SRC/writen.c

33 lines
745 B
C
Raw Normal View History

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
writen(fd, ptr, nbytes)
register int fd;
register char *ptr;
register int nbytes;
2000-04-13 09:19:23 +00:00
{
int nleft, nwritten;
2000-04-13 09:19:23 +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
}