/* * 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; { int nleft, nwritten; 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); }