Sim, esta é uma maneira válida de verificar se o soquete não está bloqueando.
O valor para um soquete sem bloqueio é 04000, soquetes não-bloqueantes em /proc/<pid>/fdinfo
são representados em octal.
Você pode validar esse comportamento com python.
Python 2.7.5 (default, Feb 19 2014, 13:47:28)
[GCC 4.8.2 20131212 (Red Hat 4.8.2-7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from socket import *
>>> import os
>>> from os import O_NONBLOCK
>>> s = socket(AF_INET, SOCK_STREAM)
>>> s.setblocking(0)
>>> print open("/proc/self/fdinfo/{0}".format(s.fileno())).read(4096)
pos: 0
flags: 04002
>>> if 04002 & O_NONBLOCK:
... print "yes"
... else:
... print "no"
...
yes
Então, agora você sabe como, devo salientar que seu desenvolvedor está fazendo errado . Se sockets sem bloqueio são algo que eles querem usar, tudo bem - no entanto, eles devem configurar um epoll(2)
no socket e bloquear na enquete.
O programa ganha nada de read(2)
em um soquete sem bloqueio que produz EAGAIN
- na verdade, o resultado é pior porque quase todos As chamadas do sistema são um ponto de preempção onde o kernel pode mudar o contexto de qualquer maneira.
Esse desenvolvedor está perdendo energia, ciclos de CPU que podem ser usados para encadeamentos inativos e não está realmente ganhando nenhum benefício de fazer isso dessa maneira.
Se o desenvolvedor quiser ser amigável com "linha de cache", fixe suas tarefas a uma CPU específica e conclua o processo.