聊聊TCP超时
来源:互联网 发布:淘宝天天特价首页 编辑:程序博客网 时间:2024/06/06 18:25
一句话总结:防止阻塞在那里,任务该往下走的时候还要往下走。
1、接收超时,等待N秒,还是没有消息,那就接着往下走
服务端
#include <iostream>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <stdio.h>using namespace std;int main(){struct sockaddr_in serAddr;int listenSock, cnntSock;listenSock = socket(AF_INET, SOCK_STREAM, 0);serAddr.sin_family = AF_INET;serAddr.sin_addr.s_addr = INADDR_ANY;serAddr.sin_port = htons(1270);bind(listenSock, (const struct sockaddr *)&serAddr, sizeof(sockaddr_in));listen(listenSock, 10);struct timeval tv = {3,0};//3.0s 接收超时设置setsockopt(listenSock, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv, sizeof(struct timeval));struct sockaddr_in cliAddr;socklen_t len = sizeof(sockaddr_in);cnntSock = accept(listenSock, (struct sockaddr*)&cliAddr, &len);cout<< "IP:" <<inet_ntoa(cliAddr.sin_addr) <<", port:"<<cliAddr.sin_port<<endl;unsigned int total = 0;int cnt = 0;while(1){getchar();cout <<"read msg..."<<endl;char buf[6000] = {0};int ret = recv(cnntSock, buf, sizeof(buf), 0); //wait 3 sec,超过3秒返回-1,继续往下走total += ret;cout << "msg:" <<endl;cout << buf;cout << "recv msg size:" << ret << ",total size:" << total <<endl;cnt++;if (5==cnt)break;}close(cnntSock);close(listenSock);return 0;}客户端
#include <iostream>#include <stdio.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>using namespace std;int main() { int sockClient = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in addrSrv; addrSrv.sin_addr.s_addr = inet_addr("127.0.0.1"); addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(1270); struct timeval tv = {3,0};//3s 超时 setsockopt(sockClient, SOL_SOCKET, SO_SNDTIMEO, (char *)&tv, sizeof(struct timeval)); connect(sockClient, ( const struct sockaddr *)&addrSrv, sizeof(struct sockaddr_in)); char buf[10] = {0}; for(unsigned int i = 0; i < 10; i++) { buf[i] = 'd'; } int ret = send(sockClient, buf, sizeof(buf) , 0); cout << "buf size:" << sizeof(buf) << "ret:" << ret <<endl; getchar(); for(unsigned int i = 0; i < 10; i++) { buf[i] = 'p'; } ret = send(sockClient, buf, sizeof(buf) , 0); cout << "buf size:" << sizeof(buf) << "ret:" << ret <<endl; getchar(); close(sockClient); return 0; }
运行结果:
阅读全文
0 0
- 聊聊TCP超时
- 聊聊TCP
- 聊聊web的底层-TCP
- TCP 超时重传
- TCP超时管理
- TCP连接超时处理
- TCP超时连接设置
- TCP超时处理
- tcp超时重传
- TCP超时重传
- tcp连接超时处理
- TCP超时重传
- tcp超时重传
- tcp超时重传
- 聊聊iOS中TCP / UDP 协议
- 聊聊TCP协议-------协议头详解
- 聊聊TCP/IP、HTTP和Socket
- 深夜聊聊Bufferbloat以及TCP BBR
- PHP写一段代码,确保多个进程同时写入一个文件成功
- php中一个字符串和一个数字相加的规则是什么?
- 请教python3处理postgresql的copy语句的问题,on windows
- 哔哩哔哩-2017前端面试
- Nginx安装
- 聊聊TCP超时
- c语言练习(2)
- java的a星算法玩
- 面向对象程序设计上机练习四(变量引用)
- Python排序(一)
- 日常总结3
- 学习JAVA的理解1
- 原生js实现tab切换
- HDU