linux编程中,关于socket的一段代码,不太理解,请问

/*处理客户端的通信*/intprocess_client(intindex){intbyte;intsock=client[index].sockfd;char*buf... /* 处理客户端的通信 */
int process_client(int index)
{
int byte;
int sock = client[index].sockfd;
char *buf = client[index].buf;
int tail = client[index].tail;
/* 接收数据 */
byte = recv(sock, buf+tail, BUF_SIZE-tail, MSG_DONTWAIT);
if (byte == 0 || (byte < 0 && errno != EINTR)) {
printf("%s:%d error or disconnected, socket is closing...\n",
client[index].ip, client[index].port);
close(sock);
client[index].sockfd = -1;
client[index].tail = 0;
return -1;
}
/* 移动缓冲区尾部指针 */
tail += byte;
if (tail > sizeof(int)) { /* 如果收到的数据超出一个整数的大小 */
/* 解析这个整数,它表示字符串的长度 */
int len = ntohl(*(int *)buf);
if (tail-sizeof(int) == len) { /* 字符串已接收完全 */
/* 显示字符串 */
buf[tail] = '\0';
printf("%s:%d > %s\n",
client[index].ip, client[index].port, buf+sizeof(int));
/* 回送 OK */
send_str(sock, "OK");
/* 移动缓冲区指针到开始 */
tail = 0;
} else if (tail == BUF_SIZE) { /* 字符串接收未完全但缓冲区已满 */
/* 显示字符串 */
buf[tail] = '\0';
printf("%s:%d > %s\n",
client[index].ip, client[index].port, buf+sizeof(int));
/* 修改缓冲区中的字符串长度,并移动缓冲区指针 */
/* 将字符串的剩余部分作为下一个字符串处理 */
/* 因为不允许阻塞,所以不能再用 eat_byte 消耗掉剩余字符 */
*(int *)buf = htonl(len-BUF_SIZE+sizeof(int));
tail = sizeof(int);
}
}
client[index].tail = tail;
return 0;
}
展开
 我来答
l4nneret
2011-01-15 · TA获得超过678个赞
知道小有建树答主
回答量:389
采纳率:0%
帮助的人:356万
展开全部
不是有注释了吗?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式