17 static char buf0
[512]; /* buffer of zeros */
20 /* Allocate disk space.
21 * Expects fd's offset to be 0; may also reset fd's offset to 0.
22 * Returns 0 on success, and a positive errno otherwise. */
24 rawfalloc(int fd
, int len
)
28 for (i
= 0; i
< len
; i
+= w
) {
29 w
= write(fd
, buf0
, sizeof buf0
);
30 if (w
== -1) return errno
;
33 lseek(fd
, 0, 0); /* do not care if this fails */
52 sockwant(Socket
*s
, int rw
)
55 struct kevent evs
[2] = {}, *ev
= evs
;
56 struct timespec ts
= {};
60 ev
->filter
= s
->added
;
61 ev
->flags
= EV_DELETE
;
70 ev
->filter
= EVFILT_READ
;
73 ev
->filter
= EVFILT_WRITE
;
76 // check only for hangup
77 ev
->filter
= EVFILT_READ
;
78 ev
->fflags
= NOTE_LOWAT
;
83 s
->added
= ev
->filter
;
88 return kevent(kq
, evs
, n
, NULL
, 0, &ts
);
93 socknext(Socket
**s
, int64 timeout
)
97 static struct timespec ts
;
99 ts
.tv_sec
= timeout
/ 1000000000;
100 ts
.tv_nsec
= timeout
% 1000000000;
101 r
= kevent(kq
, NULL
, 0, &ev
, 1, &ts
);
102 if (r
== -1 && errno
!= EINTR
) {
109 if (ev
.flags
& EV_EOF
) {