Сокеты в C: последовательный порядок примитивных вызовов - PullRequest
0 голосов
/ 06 января 2012

Я написал базовый сервер на C. Исходный код сервера выглядит примерно так:

int sfd;
...
read(sfd,...);
write(sfd,...);
...

и клиент:

int sfd;
...
write(sfd,...);
read(sfd,...);
...

В каком порядке называются эти примитивы? write(client), read(server), write(server), read(client). В этом порядке? Если нет, то можем ли мы это обеспечить?

Ответы [ 2 ]

1 голос
/ 06 января 2012

write и read блокируются.Неважно, что называется первым.Если вы вызовете read на сервере до write на клиенте, то read будет блокироваться до тех пор, пока не получит соответствующее количество байтов.

0 голосов
/ 06 января 2012

Если вы хотите обеспечить определенный порядок, вам нужно использовать мьютекс или какой-либо другой инструмент параллелизма (семафор и т. Д.).

Если в вашем приложении есть нечто большее, чем вы показываете, вы, вероятно, не заботитесь о порядке - read () будет блокировать до тех пор, пока не будет выполнена соответствующая запись (), если вы не установили неблокирующую опцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...