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
......;
}