首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

写了一个读取socket数据的函数,但是有有关问题,麻烦帮小弟我看一下

2013-07-09 
写了一个读取socket数据的函数,但是有问题,麻烦帮我看一下。#define READ_BUF 2048size_t sock_read(int so

写了一个读取socket数据的函数,但是有问题,麻烦帮我看一下。


#define READ_BUF 2048
size_t sock_read(int sockfd,char* recv_buf,size_t buf_len)
{
    char read_buf[READ_BUF]={0};
    size_t recv_len=0;
    size_t recv_total_count=0;
    while ((recv_len=read(sockfd,read_buf,READ_BUF))>0)//循环到第二次的时候就阻塞在这了
    {
        if (recv_total_count+recv_len>buf_len)
        {
            memset(recv_buf,0,buf_len);
            recv_total_count=0;
            break;
        }
        memcpy(recv_buf+recv_total_count,read_buf,recv_len);
        recv_total_count+=recv_len;
        memset(read_buf,0,READ_BUF);
    }
    return recv_total_count;
}

函数的功能是读取socket的数据,放到一个buf里面,然后返回数据的长度。
问题出在read(sockfd,read_buf,READ_BUF)这里,第一次都取成功,循环到第二次的时候就阻塞了,一直阻塞。
按道理不应该这样的,我在win下面也是用这种方法是可以用的。在linux上面为什么就不能了呢。
[解决办法]
没有数据来的时侯就会阻塞
[解决办法]
这本来就应该阻塞,它在等数据到来
[解决办法]
#define READ_BUF 2048

阻塞模式每次会读够2048才返回。你可以先接收一个数据长度,再根据这个长度去接收后续数据。
[解决办法]
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://topic.csdn.net/u/20120210/09/51109ed0-07b9-41f2-b487-a51597f2ca01.html

[解决办法]
这有socket异步的例子,你可以参考:
http://download.csdn.net/detail/geoff08zhang/4571358

热点排行