mirror of
https://github.com/servalproject/serval-dna.git
synced 2024-12-28 08:58:55 +00:00
28 lines
501 B
C
28 lines
501 B
C
|
#include <poll.h>
|
||
|
#include <unistd.h>
|
||
|
#include "e.h"
|
||
|
#include "writeall.h"
|
||
|
|
||
|
int writeall(int fd,const void *x,long long xlen)
|
||
|
{
|
||
|
long long w;
|
||
|
while (xlen > 0) {
|
||
|
w = xlen;
|
||
|
if (w > 1048576) w = 1048576;
|
||
|
w = write(fd,x,w);
|
||
|
if (w < 0) {
|
||
|
if (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK) {
|
||
|
struct pollfd p;
|
||
|
p.fd = fd;
|
||
|
p.events = POLLOUT | POLLERR;
|
||
|
poll(&p,1,-1);
|
||
|
continue;
|
||
|
}
|
||
|
return -1;
|
||
|
}
|
||
|
x += w;
|
||
|
xlen -= w;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|