sendto linux非阻塞,假设socket.sendto是非阻塞操作是否安全?

不,你不能指望 socket.sendto 是无阻塞的 .

将数据字节发送到addr给出的远程对等体(传输 - >依赖目标地址) . 如果addr为None,则将数据发送到创建传输时给定的目标地址 . 这种方法不会阻止;它缓冲数据并安排它以异步方式发送出去 .

transport, protocol = await loop.create_datagram_endpoint(factory, sock=sock)

编辑 - 关于您的评论:

socket.sendto()是否等同于transport.sendto()?

不,不是, transport.sendto 使用 loop.add_writer 使操作无阻塞 . 见implementation .

我不想使用这种方法,因为它的实现强制我通过具有回调样式的协议接收数据 .

用法:

async def main():

local = await open_local_endpoint()

remote = await open_remote_endpoint(*local.address)

remote.write(b'Hey Hey, My My')

data, addr = await local.read()

message = "Got {data!r} from {addr[0]} port {addr[1]}"

print(message.format(data=data.decode(), addr=addr))

输出:

Got 'Hey Hey, My My' from 127.0.0.1 port 45551

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值