diff options
Diffstat (limited to 'timeoutwrite.c')
-rw-r--r-- | timeoutwrite.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/timeoutwrite.c b/timeoutwrite.c new file mode 100644 index 0000000..4f665f1 --- /dev/null +++ b/timeoutwrite.c @@ -0,0 +1,28 @@ +#include <unistd.h> +#include "error.h" +#include "iopause.h" +#include "timeoutwrite.h" + +int timeoutwrite(int t,int fd,char *buf,int len) +{ + struct taia now; + struct taia deadline; + iopause_fd x; + + taia_now(&now); + taia_uint(&deadline,t); + taia_add(&deadline,&now,&deadline); + + x.fd = fd; + x.events = IOPAUSE_WRITE; + for (;;) { + taia_now(&now); + iopause(&x,1,&deadline,&now); + if (x.revents) break; + if (taia_less(&deadline,&now)) { + errno = error_timeout; + return -1; + } + } + return write(fd,buf,len); +} |