【发布时间】:2017-09-06 15:31:58
【问题描述】:
- 一个叫connect的非阻塞UDP socket,使用send发送数据,是否需要使用select/epoll/kqueue来测试是否可写?在这种情况下,对方recv缓冲区已满,“发送”可能会失败,所以我可以使用“选择”测试它是否可写,以便“发送”可能返回成功? 或者那是不必要的,因为它只是将数据发送出去,并不关心侧面的recv buff是否已满?如果是这样,“发送”可能只会返回成功,除非对方宕机?
- 对于UDP socket,“send”的返回值是多少,比如我发送100字节,它可能只返回-1(error)或者100,没有其他值?对于 TCP 可能会返回 50 ~~~~
【问题讨论】:
-
UDP 是无连接的 - 发送者不知道数据包是否到达接收者,更不用说他们是否接受它或缓冲区是否已满。