社区
网络编程
帖子详情
udp发送数据时,如果目标机不存在,sendto函数会不会阻塞?
kook_趙
2021-04-06 08:49:00
最近用Vxworks进行网络通信,发现目标机不存在时,用sendto函数发送udp数据包,出现阻塞的情况。
将sendto入口参数中的标志位设置成MSG_DONTWAIT 非阻塞后,不再出现阻塞情况。
但是有个疑问,udp不是无连接的吗?按理说不管目标机是否存在,调用sendto后不都应该是把数据包复制到底层缓冲区立刻就返回了吗?
...全文
695
2
打赏
收藏
udp发送数据时,如果目标机不存在,sendto函数会不会阻塞?
最近用Vxworks进行网络通信,发现目标机不存在时,用sendto函数发送udp数据包,出现阻塞的情况。 将sendto入口参数中的标志位设置成MSG_DONTWAIT 非阻塞后,不再出现阻塞情况。 但是有个疑问,udp不是无连接的吗?按理说不管目标机是否存在,调用sendto后不都应该是把数据包复制到底层缓冲区立刻就返回了吗?
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
QQ1289671197
2021-06-18
打赏
举报
回复
用selec配合FD_ISSET来设置超时效果更好。
zgl7903
2021-04-07
打赏
举报
回复
试试 setsockopt SOL_SOCKET,SO_SNDTIMEO 设置超时时间
UDP
的write/
send
to操作是否
会
阻塞
?
为什么80%的码农都做不了架构师?>>> ...
UDP
-
阻塞
与非
阻塞
UDP
-
阻塞
与非
阻塞
UDP
-
阻塞
与非
阻塞
设置socket非
阻塞
阻塞
查看数据从哪儿来操作系统相关获取缓冲区的大小发送
函数
的
阻塞
和非
阻塞
UDP
数据报的特点。
阻塞
模式和非
阻塞
模式下
send
、
send
to、recv、recvfrom的表现
首先socket在默认情况下是
阻塞
状态的(未指异步操作以及其它一些特殊用途下,直接默认为非
阻塞
),这就使得发送以及接收操作处于
阻塞
的状态,即调用
不
会
立即返回,而是进入睡眠等待操作完成。下面把讨论点分为发送以及接收。 一、发送选用
send
(这里特指TCP)以及
send
to(这里特指
UDP
)来描述 首先需要说明的是,不管
阻塞
还是非
阻塞
,在发送
时
都
会
将数据从应用缓冲区拷贝到内核缓冲区(SO_RCVBUF选项声明,除非缓冲区大小为0)。 1、在
阻塞
模式下
send
操作将
会
等待所有数据均被拷贝到发送缓冲区后才
会
返回。
记一次
UDP
的
send
to
函数
错误解决
错误现象 在编写使用select
函数
的TCP和
UDP
回射程序,出现
UDP
的
send
to错误,现象如下: 服务端正常启动后,调用select
函数
监听TCP和
UDP
套接字, 可以正常处理TCP请求。
UDP
客户端可以连接到服务端,但接收标准输入后无回显,
阻塞
于recvfrom。 解决过程 经排查,发现服务端处理
UDP
请求的代码有问题,如下: typedef struct sockaddr ...
TCP、
UDP
的
阻塞
和非
阻塞
模式
前言 socket在默认情况下是
阻塞
状态的,这就使得发送和接受都处于
阻塞
状态; TCP协议下发送选用
send
,
UDP
协议下,发送选用
send
to. TCP协议下接收选用recv,
UDP
协议下,接收选用recvfrom. 一、
阻塞
模式&&
send
假设发送缓冲区大小为4096KB,其中已经使用4000KB空间,剩余96KB空间;现在又有200KB的数据需要发送,则只能先将96KB的数据放入发送缓冲区但不发送(
阻塞
),直到缓冲区空出空间足够放入剩余104KB,再
send
操作将这200子节发送
网络编程
18,356
社区成员
64,161
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章