| 240 | } |
| 241 | |
| 242 | T_ERRCODE socket_recv( |
| 243 | p_socket sock, char *data, size_t len, int timeout, int *received) { |
| 244 | int err, got = 0; |
| 245 | if (*sock < 0) { |
| 246 | return CLOSED; |
| 247 | } |
| 248 | *received = 0; |
| 249 | |
| 250 | do { |
| 251 | got = recv(*sock, data, len, 0); |
| 252 | if (got > 0) { |
| 253 | *received = got; |
| 254 | return SUCCESS; |
| 255 | } |
| 256 | err = errno; |
| 257 | |
| 258 | // Connection has been closed by peer |
| 259 | if (got == 0) { |
| 260 | return CLOSED; |
| 261 | } |
| 262 | } while (err == EINTR); |
| 263 | |
| 264 | if (err == EAGAIN) { |
| 265 | return socket_wait(sock, WAIT_MODE_R, timeout); |
| 266 | } |
| 267 | |
| 268 | return err; |
| 269 | } |
| 270 | |
| 271 | //////////////////////////////////////////////////////////////////////////////// |
| 272 | // Util |
no test coverage detected