C实现的服务器与WebSocket握手失败的问题

Azuer_Z 2016-05-14 03:31:36
for (;;) {  
clientfd = accept(sockfd, (struct sockaddr *) &client_addr,
&cliaddr_len);
printf("server get connection from %s.\n", inet_ntoa(
client_addr.sin_addr));
int readize = 0;
while ((readize = read(clientfd, buf, MAXLINE)) > 0) {
printf("内容:%.*s", readize,buf);
printf("长度:%d...\n", readize);
}
write(clientfd, buf, readize);
close(clientfd);
}

以上是简单的server demo,我在与WebSocket客户端握手的时候也用的这样的流程,先处理请求,如果包涵
GET / HTTP/1.1
Connection:Upgrade
Host:127.0.0.1:8088
Origin:null
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:puVOuWb7rel6z2AVZBKnfw==
Sec-WebSocket-Version:13
Upgrade:websocket

就去解析然后send头部然后返回
HTTP/1.1 101 Switching Protocols
Connection:Upgrade
Server:beetle websocket server
Upgrade:WebSocket
Date:Mon, 26 Nov 2012 23:42:44 GMT
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:content-type
Sec-WebSocket-Accept:FCKgUr8c7OsDsLFeJTWrJw6WO8Q=

因为是刚学习,现在问题是,我不明白为什么每次循环都要close一下,如果close客户端能拿到头部,但是报错现实服务器已经关闭,如果不close则客户端一直拿不到数据,这个问题困扰我好久了,请大神帮我看看,万分感激!
...全文
271 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,387

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧