红联Linux门户
Linux帮助

linux - 基于tcp的阻塞socket规范读操作

发布时间:2008-09-01 15:44:45来源:红联作者:drivers
作者:pcwlno1

基于tcp的阻塞socket规范读操作

引用:
int read_data(int sock_fd, char *buffer, int buffer_len)

{

char *ptemp = buffer;

int bytes_to_recv = buffer_len;

int bytes_recv = 0;



if (sock_fd < 0 || NULL == buffer || buffer_len <= 0)

{

return -1;

}



while (bytes_to_recv > 0)

{

bytes_recv = recv(sock_fd, ptemp, bytes_to_recv, 0);

if (0 == bytes_recv)

{

// the server has close the connection gracefully.

close(fd);

return -1;

}

else if (bytes_recv < 0)

{

if ((EINTR == errno) || (EAGAIN == errno))

{

continue;

}

else

{

close(fd);

return -1;

}

}

else

{

ptemp += bytes_recv;

bytes_to_recv -= bytes_recv;

}

}



return 0;

}


有三个问题需要注意:

1. read_data不要与系统函数重名,初学者容易犯这种错;

2. 要用while循环收数据,尤其是将recv换成recvfrom时;

3. 注意ptemp要加偏移,否则数据是错的。
文章评论

共有 1 条评论

  1. 小豆儿 于 2011-07-19 10:20:12发表:

    是socket 阻塞读返回信息吗?