LINUX.ORG.RU

Интерфейс прикладного программирования Socket API

 ,


4

1

Опубликован перевод серии из 5 статей, предназначенных для новичков сетевого программирования (знание языка C является обязательным условием), в которой рассказано, как с помощью интерфейса прикладного программирования Socket API системы UNIX создавать сервера и сетевые клиентские программы.

>>> Подробности

★★★

Проверено: post-factum ()

Не очень люблю эту фразу, но действительно...

не нужно. Есть замечательный Beej's Guide (перевод можно найти на васм-е) и Стивенс.
Но авторы продолжают мусолить те самые разжеванные уже до упора основы. Хотя может кому-нибудь и пригодится.

Reinar ()

Новейчог должен начинать с «10000k problem».

kiverattes ★☆ ()
Ответ на: комментарий от kiverattes

Расскажите, где у вас 10 миллионов сокетов держится с хотя бы 100 тысячами активных?

bobrik ()

Код оформлен отвратительно, а так вроде все ничего. Но Стивенс лучше :)

A-234 ★★★★★ ()

до чего же баянная тема, скажу что сокеты это прошлый век, сижу изучаю ZeroMQ - вот это айс, более высокий уровень ^_^

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

ню ню

ZeroMQ - очередное специфическое.

вот send|recieve микроядра и всё_файл_плана9 вот это «вечное»

qulinxao ★★☆ ()
Ответ на: комментарий от qulinxao

поясни что ты имел ввиду? ты имеешь ввиду высокую эффективность обмена данными между процессами в микроядре? соглашусь

быть может ZeroMQ (просто этот например, я не упираюсь в одну какую-то библиотеку) во времена широкого распространения микроядра будут иметь транспорт и на основе возможностей того же самого микроядра, а shared memory они уже в серьез обсуждают, может даже уже сделали для IPC

и это, покажите мне plan9, кому он нужен на практике со своей «всё файл» на полном серьезе, пусть это и в самом деле отличная концепция (не спорю, просто не вижу острой в этом необходимости чтобы все было файлом)

I-Love-Microsoft ★★★★★ ()

Спасибо за новость.

Licwin ★★★★★ ()
Ответ на: комментарий от Licwin

за новость спасибо, спасибо за старания, но всё же socket API это совсем уж 3D (древний дубовый дедовский) способ взаимодействия, есть же куча высокоуровневых оберток, более удобных и фичастых, тоже поверх тех же сокетов

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

просто не вижу острой в этом необходимости чтобы все было файлом

Эта необходимость видится, когда пробуешь одно и тоже написать под разные ОС. Например, после винды посиксный линукс - просто прелесть. Но попрограммировав под ним со временем ъочешь бОльшего: почему последовательный порт, сокет, другие устройства всё же настолько по-разному открываются и конфигурируются?

А ещё когда чувствуешь эту необходимость, когда хочется из консоли просто взять и без третьих программ сделать скриншотик, сэмулировать нажатие клавиши, и просто потрясающее: подёргать графический интерфейс приложения без всякой мороки!

gag ★★★★★ ()

vikos, сЕрверЫ

anonymous ()
Ответ на: комментарий от I-Love-Microsoft

открываю первый пример по zeromq и вижу

import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://127.0.0.1:5000")
 
while True:
    msg = socket.recv()
    print "Got", msg
    socket.send(msg)

и как с этим можно работать, не понимая что такое сокеты и как их готовить?

Reset ★★★★★ ()

О, там и про IPv6 есть - вот за это спасибо! Давно собираюсь модернизировать свои программы, использующие сокеты. Уже попадалась одна статья, теперь вот вторая - надо уже разобраться.

Кстати, я от части пользуюсь диалапом. И вот такие скриншоты - пожалуйста, лучше не надо. Ведь они не несут смысловой нагрузки, и всё это можно в plain-text:

gag@pc:/home/gag/examples$ ./example1
Program output...
Program output...
gag@pc:/home/gag/examples$

gag ★★★★★ ()
Ответ на: комментарий от Reset

а с сокетами можно просто работать? ZeroMQ гораздо проще даже на нулевом этапе и самом простом применении

I-Love-Microsoft ★★★★★ ()

1: зачем нужен перевод (если чувак не знает английского, то в IT ему делать нечего) 2: зачем упоминать про «знание языка C является обязательным» (если чувак не знает С, то что он вообще тут делает)

powerpc ()

по тексту подумал, что это МежДелМаш бот вернулся

seed_stil ★★ ()
Ответ на: комментарий от Reset

и как с этим можно работать, не понимая что такое сокеты и как их готовить?

что тебе не понятно в этом примере? Даже названия функций говорят сами за себя.

true_admin ★★★★★ ()

+1 к ненужности статей про сокеты. Скорее не помешали бы advanced топики. Ну там, raw sockets какие-нить, тюнинг tcp-стэка итп. Впрочем, всё есть в манах.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

Мне всё понятно, а вот человеку, который не знает про сокеты не поймет ничего.

Reset ★★★★★ ()

ЗЫ ненавижу tcp за невозможность контроллировать процесс передачи. Для «реал-таймовых» систем тока udp :(

true_admin ★★★★★ ()
Ответ на: комментарий от Reset

Ну что-что не понятно? Макимум bind требует объяснений.

Тут, скорее вопросы к тому что у send нет аргумента кому отправлять (это потому что сокет помнит от кого был последний recv) или что будет если сервер во время обработки соединений повиснет (ответ: грёбаный zmq повесится ибо таймаутов нету и нужны костыли).

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

Для «реал-таймовых» систем тока udp :(

Когда-то это было так. Но в принципе уже некоторое время существует SCTP, хотя сам ещё не пробовал.

gag ★★★★★ ()
Ответ на: комментарий от gag

некоторое время существует SCTP

я думаю будут проблемы с прохождением фаерволов. Это хреново для коммерческих приложений.

Надо ещё api посмотреть. Я когда-то давно смотрел и мне показалось жуткой херотнёй. Я щас в примерах смотрю - всё как с сокетами. Видимо, мне попадалась нестандартная реализация.

true_admin ★★★★★ ()
Ответ на: комментарий от gag

мне ещё не нравится 4-way handshake. Я бы хотел вообще два режима: один с syncookie (как щас) для защиты от флуда, а второй чтобы тупо можно было в первом-же пакете слать данные. Это заметно бы ускорило, скажем, веб-браузинг до удалённых серверов. Не зря же keep alive придумали. А тут вообще и без него будет зашибись. Я гений :).

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

(ответ: грёбаный zmq повесится ибо таймаутов нету и нужны костыли)

Ну и как после этого этот ZeroMQ можно назвать чем-то серьезным?

Решения, полностью заменяющего собой сокеты вроде нет.

pathfinder ★★★ ()
Ответ на: комментарий от pathfinder

Справедливости ради, какие-то костыли есть: https://github.com/zeromq/pyzmq/issues/132

Но, блин, это несерьёзно. Я, например, хочу знать какие сообщения были не доставлены. И тут облом-с.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

мне ещё не нравится 4-way handshake....Не зря же keep alive придумали. А тут вообще и без него будет зашибись...

Не распарсил. При чем тут keep alive и посылка данных в первом же пакете? Вообще идея отложенной установки соединения интересна. Обычно сначала установили соединение, потом шлем данные. А тут сначала шлем данные, а чуть позже заканчиваем процедуру соединения, ну или узнаем, что сервер выключен и это все было впустую.

pathfinder ★★★ ()
Ответ на: комментарий от pathfinder

При чем тут keep alive и посылка данных в первом же пакете?

keep-alive позволяет первым же пакетом отослать данные без установки нового соединения. Вместо этого можно было бы попытаться отправить данные с флагом типа «создать соединение при получении этого пакета».

Это не то же самое keep-alive, но это позволило бы ускорить обработку запросов когда вообще никаких соединений не установлено.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

keep-alive позволяет первым же пакетом отослать данные без установки нового соединения

ЩИТО?!!

//Пошел читать про keep-alive

pathfinder ★★★ ()
Ответ на: комментарий от pathfinder

ну, в смысле, использует старое соединение для отправки нового запроса. Т.е. нет лага на установку нового соединения.

true_admin ★★★★★ ()
Ответ на: комментарий от true_admin

ну, в смысле, использует старое соединение для отправки нового запроса. Т.е. нет лага на установку нового соединения.

Понял, термин keep-alive подразумевается в контексте HTTP и его особенностей, а не в контексте TCP. Ну дык в TCP мы и без костылей так можем делать.

pathfinder ★★★ ()
Ответ на: комментарий от A-234

кому не нравится форматирование по Кернигану, надо его же кодо-кирпичём по морде

maint ()
Ответ на: комментарий от maint

Шрифт нечитаемый, расстояние между строчками хотя бы увеличили. Керниган изобретал свой стиль форматирования для экономии места на бумаге, что бы полиграфия дешевле была. Вы неправильно произведения Кернигана используете, вы ими деретесь а их нужно читать. Попробуйте как нибудь, может поймете сами как и зачем он там код свой оформляет.

A-234 ★★★★★ ()

А как писать сетевые приложения, так и не рассказали. Разжевано и размазано на 5 статей то, что можно было внятно впихнуть в одну.

delete83 ★★ ()
Ответ на: комментарий от I-Love-Microsoft

В zeromq особенно здорово сделана обработка ошибок - что-то не отработало - assert =)

indie ()
Ответ на: комментарий от qulinxao

Только не говори, что на фотографии это ты.

anonymous ()

В списке протоколов: ATM PVC переведено как «Доступ к данным пластиковой карточки» maximum facepalm...

anonymous ()
Ответ на: комментарий от I-Love-Microsoft

изучаю ZeroMQ

идея хороша, но реализация отвратна. эффективность же - крайне низка.

niXman ★★ ()
Ответ на: комментарий от indie

только в экзамплах, в остальном чем отличается от сокетов в плане ошибок?

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

сокеты это прошлый век, сижу изучаю ZeroMQ

видел я таких изучальщиков. когда что-то перестает работать в их «высоком уровне», они начинают лепить такие костыли, что хочется уйти в запой и не возвращаться.

и что там изучать на «высоком уровне» - три класса, четыре метода и никакой свободы действия?

anonymous ()
Ответ на: комментарий от I-Love-Microsoft

Ты смотрел err.hpp,err.cpp?

а теперь погрепай на предмет assert в исходниках. никакого контроля обработки ошибок.

indie ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.