4 extern volatile Sjmp_buf gNetTimeoutJmp
;
5 extern volatile Sjmp_buf gPipeJmp
;
11 SRecv(int sfd
, char *const buf0
, size_t size
, int fl
, int tlen
, int retry
)
15 char *volatile buf
= buf0
;
17 vsio_sigproc_t sigalrm
, sigpipe
;
20 if (SSetjmp(gNetTimeoutJmp
) != 0) {
22 (void) SSignal(SIGALRM
, (sio_sigproc_t
) sigalrm
);
23 (void) SSignal(SIGPIPE
, (sio_sigproc_t
) sigpipe
);
25 if ((nread
> 0) && (retry
== kFullBufferNotRequired
))
31 if (SSetjmp(gPipeJmp
) != 0) {
33 (void) SSignal(SIGALRM
, (sio_sigproc_t
) sigalrm
);
34 (void) SSignal(SIGPIPE
, (sio_sigproc_t
) sigpipe
);
36 if ((nread
> 0) && (retry
== kFullBufferNotRequired
))
39 return (kBrokenPipeErr
);
42 sigalrm
= (vsio_sigproc_t
) SSignal(SIGALRM
, SIOHandler
);
43 sigpipe
= (vsio_sigproc_t
) SSignal(SIGPIPE
, SIOHandler
);
50 tleft
= (int) (done
- now
);
53 if ((nread
== 0) || (retry
== kFullBufferRequired
)) {
59 (void) alarm((unsigned int) tleft
);
60 nread
= recv(sfd
, (char *) buf
, nleft
, fl
);
65 if (retry
== kFullBufferRequiredExceptLast
)
68 } else if (errno
!= EINTR
) {
80 if ((nleft
<= 0) || ((retry
== 0) && (nleft
!= (int) size
)))
88 (void) SSignal(SIGALRM
, (sio_sigproc_t
) sigalrm
);
89 (void) SSignal(SIGPIPE
, (sio_sigproc_t
) sigpipe
);
97 SRecv(int sfd
, char *const buf0
, size_t size
, int fl
, int tlen
, int retry
)
114 tleft
= (int) (done
- now
);
116 nread
= size
- nleft
;
117 if ((nread
== 0) || (retry
== kFullBufferRequired
)) {
131 result
= select(sfd
+ 1, SELECT_TYPE_ARG234
&ss
, NULL
, NULL
, SELECT_TYPE_ARG5
&tv
);
135 } else if (result
== 0) {
137 nread
= size
- nleft
;
138 if ((nread
> 0) && (retry
== kFullBufferNotRequired
))
142 return (kTimeoutErr
);
143 } else if (errno
!= EINTR
) {
148 #if defined(WIN32) || defined(_WINDOWS)
149 nread
= recv(sfd
, (char *) buf
, nleft
, fl
);
151 nread
= recv(sfd
, (char *) buf
, nleft
, fl
);
157 if (retry
== kFullBufferRequiredExceptLast
)
158 nread
= size
- nleft
;
160 } else if (errno
!= EINTR
) {
161 nread
= size
- nleft
;
172 if ((nleft
<= 0) || ((retry
== 0) && (nleft
!= (int) size
)))
177 nread
= size
- nleft
;