![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
oleg_2 |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Вопрос по сокету-2
Язык СИ ОС UNIX Имеются "клиент" и "сервер" (самодельные). Работают поверх TCP. Фрагмент клиента: //--- sd_client -сокет, соединенный с сервером --- k=read(sd_client, buf, sizeof(buf)); Конец фрагмента. Сервер на запрос клиента посылает данные, а затем закрывает сокет close(sd_serv) на своей стороне. При закрытом на сервере сокете (sd_serv), на стороне клиента вызов read() возвращает 0, и это признак конца передачи. В штатном режиме это работает. Но на сервере иногда случаются ошибки (не доступны все или часть данных). Вопрос. Возможно ли на стороне сервера так подействовать на сокет (sd_serv), что бы на стороне клиента вызов read() вернул бы -1. Кто знает прошу ответить. |
|
|
ViGOur |
![]()
Сообщение
#2
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Раз ты работаешь поверх TCP, значит у тебя есть свой аля протокол передачи данных, вот в нем и отсылай сообщение об ошибке.
Или просто закрывай соединение и все. Если это не подходит, то объясни для чего именно тебе нужно в read получить -1? Просто если идет ошибка работы с сокетама, то нужно обрабатывать ошибки. Если ошибки на стороне сервера, например подготовки пакета, то нужно делать надстройку, которая сообщит об этом клиенту... |
|
|
oleg_2 |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 12 Регистрация: 25.7.2009 Пользователь №: 943 Спасибо сказали: 1 раз(а) Репутация: ![]() ![]() ![]() |
Вопрос по сокету-2
Протокол HTTP/1.0 Речь идет о прокси-сервере. По первоначальному замыслу схема работы такая: -клиент посылает запрос. -прокси-сервер подключается по указанному в запросе адресу. -прокси-сервер передает туда запрос клиента. -прокси-сервер перекачивает данные от целевого сервера клиенту без накопления и без преобразования. -закрывает сокет - признак конца файла. В этой схеме не предусмотрена обработка случая, когда происходит ошибка во втором канале: прокси-сервер - целевой сервер, т. е. когда сам прокси-сервер получает -1 чтения сокета. Вот если б эту -1 передать клиенту. А так клиент думает, что получен весь файл целиком. |
|
|
ViGOur |
![]()
Сообщение
#4
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Я делал подобное же, только с оберткой поверх TCP.
Что вроде: И подобными пакетами обменивался между клиентом и сервером. В nCommand передавал команды, что нужно сделать тому или другому, nError - ошибки, если таковые были, на параллельном сокете...
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 7.5.2025, 13:43 |