小编Dav*_*uss的帖子

当非阻塞send()只传输部分数据时,我们可以假设它会在下次调用时返回EWOULDBLOCK吗?

非阻塞套接字的手册页中详细记录了两个案例:

  • 如果send()返回与传输缓冲区相同的长度,则整个传输成功完成,并且套接字可能处于或不处于返回EAGAIN/EWOULDBLOCK的状态,下一次调用> 0字节进行传输.
  • 如果send()返回-1并且errno是EAGAIN/EWOULDBLOCK,则没有传输完成,并且程序需要等到套接字准备好接收更多数据(epoll情况下的EPOLLOUT).

没有记录的非阻塞套接字是:

  • 如果send()返回一个小于缓冲区大小的正值.

是否可以安全地假设send()甚至会在一个字节的数据上返回EAGAIN/EWOULDBLOCK?或者,非阻塞程序是否应该再次发送()以获得结论性的EAGAIN/EWOULDBLOCK?我担心在插座上放一个EPOLLOUT观察器,如果它实际上没有处于"阻塞"状态以响应它的出现.

显然,后一种策略(再次尝试获得某种结论)具有明确定义的行为,但它更加冗长并且会对性能产生影响.

c sockets linux nonblocking

15
推荐指数
2
解决办法
2万
查看次数

Celery喜欢Ruby的软件?

有没有类似Celery for Ruby的东西?有没有经历过rcelery的人?这是生产的好选择吗?

更新:我遇到了resque,它看起来像我可能用于我的任务.欢迎进一步的建议!

ruby distributed-computing

12
推荐指数
2
解决办法
7546
查看次数

标签 统计

c ×1

distributed-computing ×1

linux ×1

nonblocking ×1

ruby ×1

sockets ×1