📄 function_restart.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -