关于socket的read和write

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





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值