小编Uwe*_*Uwe的帖子

C中的非阻塞udp套接字编程:我得到了什么?

我在理解recv()/ recvfrom()从非阻塞UDP套接字返回时遇到了问题.

更具体一点,与TCP相比(如果我错了,请纠正我):

  • 阻塞套接字(TCP或UDP)将不会从recv()返回,直到缓冲区中有一些数据.这可以是一些字节数(TCP)或完整数据报(UDP).

  • 非阻塞TCP套接字要么返回EWOULDBLOCK(linux)/ WSAEWOULDBLOCK(窗口),要么返回当前缓冲区中的字节.由于TCP数据是流,因此返回多少字节无关紧要.

现在的问题是:

  • 如果没有可用数据,非阻塞UDP套接字也会返回WOULDBLOCK(linux)/ WSAEWOULDBLOCK(windows).但是如果有数据可用,非阻塞UDP套接字只返回一些字节,这可能意味着你只得到一半数据报或UDP套接字总是返回完整的数据报吗?

编辑:

我对"数据报的一半"的意思是:如果我在套接字当前正在接收数据报时调用recv()会发生什么.在那一刻,缓冲区中有一些字节,但数据报尚未完成.

您的解释和评论表示赞赏.谢谢!

sockets udp tcp nonblocking blocking

8
推荐指数
1
解决办法
8654
查看次数

标签 统计

blocking ×1

nonblocking ×1

sockets ×1

tcp ×1

udp ×1