Castecny zapis do socketu
Michal Dobes
dobes na tes.eu
Pátek Květen 2 22:17:48 CEST 2008
Dalibor Straka napsal(a):
>> Aby se nezablokoval, tak musí být deskriptor přepnut do neblokujícího
>>
> Neni pravda: (man poll)
> POLLOUT Writing now will not block.
Na tomhle jsem se kdysi dávno pěkně vypekl a zuřil chvíli, než jsem
dospěl k názoru, že se to není zcela pravda. Přesněji, write se mi
choval tak, že byl částečný a vrátilo se to hned zpět v případě, když
délka zapisovaných dat nebyla větší než maximální velikost výstupního
bafru, pokud jsem jedním writem poslal blok větší, tak se bez
explicitního nonblock režimu zablokovalo. Pokud se poslal blok menší
a nebylo na celý místo v bafrech, tak proběhl částečný zápis.
Nezkoumal jsem, zda se za posledních X let něco změnilo. Nicméně,
krom toho víc než doporučeného O_NONBLOCK je ještě na pokus pohrát
si s SO_SNDTIMEO.
Možná je i zajímavý status blokování u funkce sendmsg, která se beztak
nakonec interně použije. Pro tu v podstatě platí, že pokud si výslovně
neřeknu o O_NONBLOCK, tak se to zablokovat může i nemusí
(v závislosti na stavu bafrů).
M.
Další informace o konferenci Linux