393 #define BLOCKING_IO_RETURN_INT(FD, FUNC) { \ 394 int ret; \ 395 threadEntry_t self; \ 396 fdEntry_t *fdEntry = getFdEntry(FD); \ 397 if (fdEntry == NULL) { \ 398 errno = EBADF; \ 399 return -1; \ 400 } \ 401 do { \ 402 startOp(fdEntry, &self); \ 403 ret = FUNC; \ 404 endOp(fdEntry, &self); \ 405 } while (ret == -1 && errno == EINTR); \ 406 return ret; \ 407 } 408 409 int NET_Read(int s, void* buf, size_t len) { 410 BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, 0) ); 411 } 412 413 int NET_ReadV(int s, const struct iovec * vector, int count) { 414 BLOCKING_IO_RETURN_INT( s, readv(s, vector, count) ); 415 } 416 417 int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, 418 struct sockaddr *from, int *fromlen) { 419 socklen_t socklen = *fromlen; 420 BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) ); 421 *fromlen = socklen; 422 } 423 424 int NET_Send(int s, void *msg, int len, unsigned int flags) { 425 BLOCKING_IO_RETURN_INT( s, send(s, msg, len, flags) ); 426 } 427 428 int NET_WriteV(int s, const struct iovec * vector, int count) { 429 BLOCKING_IO_RETURN_INT( s, writev(s, vector, count) ); 430 } 431 432 int NET_SendTo(int s, const void *msg, int len, unsigned int | 393 #define BLOCKING_IO_RETURN_INT(FD, FUNC) { \ 394 int ret; \ 395 threadEntry_t self; \ 396 fdEntry_t *fdEntry = getFdEntry(FD); \ 397 if (fdEntry == NULL) { \ 398 errno = EBADF; \ 399 return -1; \ 400 } \ 401 do { \ 402 startOp(fdEntry, &self); \ 403 ret = FUNC; \ 404 endOp(fdEntry, &self); \ 405 } while (ret == -1 && errno == EINTR); \ 406 return ret; \ 407 } 408 409 int NET_Read(int s, void* buf, size_t len) { 410 BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, 0) ); 411 } 412 413 int NET_NonBlockingRead(int s, void* buf, size_t len) { 414 BLOCKING_IO_RETURN_INT( s, recv(s, buf, len, MSG_DONTWAIT)); 415 } 416 417 int NET_ReadV(int s, const struct iovec * vector, int count) { 418 BLOCKING_IO_RETURN_INT( s, readv(s, vector, count) ); 419 } 420 421 int NET_RecvFrom(int s, void *buf, int len, unsigned int flags, 422 struct sockaddr *from, int *fromlen) { 423 socklen_t socklen = *fromlen; 424 BLOCKING_IO_RETURN_INT( s, recvfrom(s, buf, len, flags, from, &socklen) ); 425 *fromlen = socklen; 426 } 427 428 int NET_Send(int s, void *msg, int len, unsigned int flags) { 429 BLOCKING_IO_RETURN_INT( s, send(s, msg, len, flags) ); 430 } 431 432 int NET_WriteV(int s, const struct iovec * vector, int count) { 433 BLOCKING_IO_RETURN_INT( s, writev(s, vector, count) ); 434 } 435 436 int NET_SendTo(int s, const void *msg, int len, unsigned int |