static int read_socket (int sock_fd, char *buffer, int length) { int bytes_left; int bytes_read; char *ptr = buffer; time_t time_a; time_t time_b; bytes_left=length; while(bytes_left>0) { bytes_read=read(sock_fd,ptr,bytes_left); if(bytes_read<0) { if(errno==EINTR) { bytes_read=0; } else if(errno == EAGAIN) { continue; } else { return(-1); } } else if(bytes_read == 0) { break; } bytes_left-=bytes_read; ptr+=bytes_read; } return (length - bytes_left); }
int my_write(int fd,void *buffer,int length) { int bytes_left; int written_bytes; char *ptr; ptr=buffer; bytes_left=length; while(bytes_left>0) { /* 开始写*/ written_bytes=write(fd,ptr,bytes_left); if(written_bytes<=0) /* 出错了*/ { if(errno==EINTR) /* 中断错误 我们继续写*/ written_bytes=0; else /* 其他错误 没有办法,只好撤退了*/ return(-1); } bytes_left-=written_bytes; ptr+=written_bytes; /* 从剩下的地方继续写 */ } return(0); }int my_read(int fd,void *buffer,int length) { int bytes_left; int bytes_read; char *ptr; bytes_left=length; while(bytes_left>0) { bytes_read=read(fd,ptr,bytes_read); if(bytes_read<0) { if(errno==EINTR) bytes_read=0; else return(-1); } else if(bytes_read==0) break; bytes_left-=bytes_read; ptr+=bytes_read; } return(length-bytes_left); }
while(1) { if ((connfd = accept(....)) == -1) { if (errno == EINTR) { continue; } perror("accept()"); exit(1); } //do something with the connfd ......; }
关于socket的read和write
最新推荐文章于 2023-09-08 23:00:00 发布