搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
IT小白
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
大数据-玩转数据-pg数据库释放表空间_pgsql释放空间
2
AI绘图Stable Diffusion中关键技术:U-Net的应用
3
Latex常用功能模板集合_title page latex模板
4
Ubuntu20.04基本开发环境配置_ubuntu20 开发
5
Python每日一练-----零钱兑换_给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。
6
操作系统-Operating-System第二章:启动、中断、异常和系统调用_中断和异常是操作系统第几章
7
翻译: GPT4等大型语言模型的原理解析和未来预测慢思考和模型自我迭代和LLM安全_这些模式使大语言模型能够根据一个人看似不起眼的键入内容来猜测他们。例如,如果
8
2023年4月《中国数据库行业分析报告》正式发布(含精彩内容概览)_中国数据库行业分析报告pdf
9
【计算机视觉】【神经网络与深度学习】深度学习在图像超分辨率重建中的应用_是基于单张低分辨率的重建方法,即single image super-resolution (sis
10
ehci、xhci是什么?它们有什么区别_xchi
当前位置:
article
> 正文
socket编程中的超时设置示例详解之二_getsockopt(sclient, sol_socket, so_error
作者:IT小白 | 2024-03-12 17:48:12
赞
踩
getsockopt(sclient, sol_socket, so_error
接前文
二、操作(send, recv)超时
对它们有两种方式来设置超时,
1. 将send, recv设置成非阻塞模式,然后用select来设置超时机制,就如上面的connect方式一样。
2. 使用setsockopt()函数来设置相应的超时机制。
因为前一种方式在connect中重点说明,本节来主要说明第二种方式。
示例代码如下:
对send和recv进行了超时设置,并最多做四次重试
/*
* \brief
* tcp client
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/time.h>
#include <netdb.h>
#include <string.h>
#define TIMEOUT_TIME 2
#define SERVPORT 8080
#define MAXDATASIZE 100
int main(int argc, char *argv[])
{
int sockfd, recvbytes;
char rcv_buf[MAXDATASIZE]; /*./client 127.0.0.1 hello */
char snd_buf[MAXDATASIZE];
struct hostent *host; /* struct hostent
* {
* char *h_name; // general hostname
* char **h_aliases; // hostname's alias
* int h_addrtype; // AF_INET
* int h_length;
* char **h_addr_list;
* };
*/
struct sockaddr_in server_addr;
/* Timeout */
struct timeval timeout;
socklen_t len = sizeof(timeout);
int result;
int error;
int i;
if (argc < 3)
{
printf("Usage:%s [ip address] [any string]\n", argv[0]);
return 1;
}
*snd_buf = '\0';
strcat(snd_buf, argv[2]);
if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket:");
exit(1);
}
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(SERVPORT);
inet_pton(AF_INET, argv[1], &server_addr.sin_addr);
memset(&(server_addr.sin_zero), 0, 8);
/* create the connection by socket
* means that connect "sockfd" to "server_addr"
*/
if (connect(sockfd, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
{
perror("connect");
exit(1);
}
/* send 超时设置,并最多做四次重试 */
timeout.tv_sec = TIMEOUT_TIME;
timeout.tv_usec= 0;
result = setsockopt(sockfd, SOL_SOCKET, SO_SNDTIMEO, (char*)&timeout.tv_sec, len);
if (result < 0)
{
perror("setsockopt:");
exit(1);
}
for(i = 0; i < 4; i++)
{
if (send(sockfd, snd_buf, sizeof(snd_buf), 0) == -1)
{
getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len);
if (error == 0)
{
printf("recv timeout!\n");
continue;
}
}
else
{
break;
}
}
printf("send:%s\n", snd_buf);
/* recv 超时设置,并最多做四次重试 */
timeout.tv_sec = TIMEOUT_TIME;
timeout.tv_usec= 0;
result = setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (char*)&timeout.tv_sec, len);
if (result < 0)
{
perror("setsockopt:");
exit(1);
}
for(i = 0; i < 4; i++)
{
if ((recvbytes = recv(sockfd, rcv_buf, MAXDATASIZE, 0)) == -1)
{
getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &len);
if (error == 0)
{
printf("recv timeout!\n");
continue;
}
}
else
{
break;
}
}
rcv_buf[recvbytes] = '\0';
printf("recv:%s\n", rcv_buf);
close(sockfd);
return 0;
}
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/IT小白/article/detail/225079
推荐阅读
article
OpenFeign报文内容大报错: {“
code
“
:
1,“msg“
:
“
JSON
parse
erro...
报错具体详情:[{"
code
"
:
1,"msg"
:
"
JSON
parse
error
:
I
ll
egal
character
...
赞
踩
article
v
s
code
远程连接Linux
虚拟机
:配置过程中遇到的所有问题_re
s
olver
error
: er...
v
s
code
远程连接linux操作系统过程中可能遇到的问题及解决方案_re
s
olver
error
:
error
: th...
赞
踩
article
UE4编译出现
MSB307
5
错误解决方法_
microsoft
.
makefile
.
targets
(44...
目录:Unreal Engine\UnrealBuildTool\BuildConfiguration.xml[详细]
-->
赞
踩
article
Centos7
xfs
_
trans
_
read
_
buf
_
map
metadata i/o error...
Centos7
xfs
_
trans
_
read
_
buf
_
map
metadata i/o error
_
xfs
_
trans
_
...
赞
踩
article
求助,
cv2
.
error
:
OpenCV
(4.9.0) :-1:
error
: (-5:Bad ar...
cv2
.
error
:
OpenCV
(4.9.0) :-1:
error
: (-5:Bad
argument
)
in
fu...
赞
踩
article
php
中的
图像处理
(七)_imagecreatefrom
png
(): gd-
png
:
fatal
l...
图像处理
图像的格式 jpeg/jpg
png
是一种网络图像,采用 了无损压缩标准 gif 动态图片 图...
赞
踩
article
【
Error
】报错--
torch
.nn.Sigmoid():__
init
__()
takes
1 p...
【
Error
】报错--
torch
.nn.Sigmoid():__
init
__()
takes
1
positional
...
赞
踩
article
成功发现
error
:
static
assertion
failed
问题所在
_[
error
] sta...
error
:
static
assertion
failed
:
YOU_MIXED_MATRICES_OF_DIFFER...
赞
踩
article
syntax
error
: non-
declaration
statement
outside fu...
因为你在函数体外给赋值了,go语言有闭包原则,还有它的变量命名规则,导致你的赋值函数体没有办法使用,所以才会报错,正确写...
赞
踩
article
Go教程(六)切片_
panic
:
runtime
error
:
slice
bounds
out o...
Golang中的切片是对数组的抽象和封装,切片的长度和容量不是固定的,是可以动态增加的切片声明var mySlice [...
赞
踩
article
GitHub Copilot
extension
activation
error
: ‘No acc...
好不容易学生认证通过了,打开vscode用
copilot
结果一直报这个错误。_
error
:
your
editor
鈥檚 c...
赞
踩
article
m>STM32f0
m>-
m
dk-SWD-ST-
m>link
m>的
m>Trace
m>调试问题_debugger -cortex...
STM32F0 强制设置 TRACE功能,会出现以下问题。原因如下。最近使用st-
m>link
m>调试st
m
32f030C8t6...
赞
踩
article
error
:
use
of
undeclared
identifier
_
error
:
use
of u...
error
:
use
of
undeclared
identifier
问题描述在编写HLS代码过程中,使用流数据时报错,说...
赞
踩
article
git
-生成证书、公钥、私钥、
error
setting
certificate
verify
lo...
git
-生成证书、公钥、私钥、
error
setting
certificate
verify
locations解决方...
赞
踩
article
gitlab
发送邮件时报错
Open
SSL
::
SSL
::
SSL
Error(
SSL
_
connect
re...
最近,部门需要搭建一个
gitlab
来管理代码。
gitlab
搭建过程呢,网上的资料很全面,这里就不展开叙述了。 在服务器搭...
赞
踩
article
【已解决】
error
setting
certificate
verify
locations
: C...
git黑窗口报错“
error
setting
certificate
verify
locations
”,意思就是证书位...
赞
踩
article
Git
出现
error
setting
certificate
verify
错误时的解决办法_e...
重新安装
Git
:如果你已经尝试过配置证书路径,但仍然遇到 SSL 证书问题,可能需要重新安装
Git
。确保你下载的是最...
赞
踩
article
git
修改提交者姓名,突然报错
warning
:
user
.
name
has
multiple
val...
git
修改提交名称出现
warning
:
user
.
name
has
multiple
values
error: cann...
赞
踩
article
git
修改用户名和邮箱账号_
warning
:
user
.
email
has
multiple
val...
git
修改用户名和邮箱账号_
warning
:
user
.
email
has
multiple
values
error:...
赞
踩
article
解决
git
中【
user
.
name
has
multiple
value
】的错误_warning:...
git
在命令行输入一下代码时$
git
config --global
user
.
name
"Your Name"$ ...
赞
踩
相关标签
java
linux
vscode
运维
centos
opencv
人工智能
计算机视觉
python
深度学习
pytorch
slam
Eigen
golang
github
copilot
stm32f0
trace
hls
git
gitlab