function_restart.c

来自「多线程 http资源下载工具 给予linux平台的。还凑合。有bug给我联系」· C语言 代码 · 共 97 行

C
97
字号
#include <unistd.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/epoll.h>#include <sys/socket.h>#include <errno.h>int epoll_wait_restart (int fd_epoll, struct epoll_event *event,	\			       int max_event, int timeout){  int errno_old;  int retval;    errno_old = errno;  while ((-1 == (retval = epoll_wait (fd_epoll, event, max_event, timeout))) &&	\	 (EINTR == errno));  return retval;}ssize_t send_restart (int fd, const void *buf, size_t len, int flags){  ssize_t nbytes_remain;  ssize_t nbytes;  char *p;  int errno_old;    nbytes_remain = len;   p = (char *) buf;   errno_old = errno;     while (1)     {       errno = 0;       nbytes = send (fd, (void *) p, nbytes_remain, flags);              if (0 != errno)	 if (EINTR != errno)	   return -1;              p += nbytes;       nbytes_remain -=nbytes;       if (0 >= nbytes_remain)	 break;     }      errno = errno_old;   return 0;}ssize_t recv_restart (int fd, void *buf, size_t len, int flags){  ssize_t nbytes_recv;  while ((-1 == (nbytes_recv = recv (fd, buf, len, flags))) && (EINTR == errno));  return nbytes_recv; }ssize_t write_restart (int fd, const void *buf, size_t count){  ssize_t nbytes_remain;  ssize_t nbytes;  char *p;  int errno_old;    nbytes_remain = count;   p = (char *) buf;   errno_old = errno;     while (1)     {       errno = 0;       nbytes = write (fd, (void *) p, nbytes_remain);              if (0 != errno)	 if (EINTR != errno)	   return -1;              p += nbytes;       nbytes_remain -=nbytes;       if (0 >= nbytes_remain)	 break;     }      errno = errno_old;   return 0;}void close_restart (int fd){  while (-1 == close (fd) && EINTR == errno);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?