информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Где водятся OGRыSpanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 По роутерам Juniper расползается... 
 С наступающим 
 Microsoft обещает радикально усилить... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / beginners
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
Сокеты 22.06.05 01:17  
Автор: KUV Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Пишу следующий код:

#include <time.h>
#include <errno.h>
#include <stdio.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/wait.h>

int main() {
struct sigaction sigchld_action;
struct sockaddr_in socket_address;
struct in_addr local_address;
int server_socket;
int rval;

memset(&sigchld_action, 0, sizeof(sigchld_action));
sigchld_action.sa_handler = NULL;
sigaction(SIGCHLD, &sigchld_action, NULL);

server_socket = socket(PF_INET, SOCK_STREAM, 0);

local_address.s_addr = INADDR_ANY;

memset(&socket_address, 0, sizeof(socket_address));

socket_address.sin_family = AF_INET;
socket_address.sin_port = htons(1428);
socket_address.sin_addr = local_address;

rval = bind(server_socket, &socket_address, sizeof(socket_address));

rval = listen(server_socket, 5);

struct sockaddr_in remote_address;
socklen_t address_length;
int connection;
int mail_sock;
char buffer[4096];
pid_t child_pid;
int bytes_read;

address_length = sizeof(remote_address);
connection = accept(server_socket, &remote_address, &address_length);

do {
bytes_read = read(connection, buffer, sizeof(buffer) - 1);
printf("#%i: %s\n", bytes_read, &buffer);
fflush(stdout);
write(connection, buffer, bytes_read);
buffer[bytes_read] = 0;
} while (bytes_read > 0);

printf("\n\n");

close(connection);

return 0;
}

По идее прога должна слушать порт и отвечать на него копированием запроса.
Тестирую его этим скриптов на php:

<?
$fp = fsockopen("lo", 1428, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$req = 'request';

fwrite($fp, $req);
while (!feof($fp)) {
echo htmlspecialchars(fgets($fp, 128));
}
fclose($fp);
echo "<br/>Done.";
}
?>

Проблема в том, что запрос читается нормально, но вызов write блокирует программу намертво. Не могу понять что же я сделал неправильно, может какието флаги не проставил...

Оптимально - дайте просто пример маленькой программы, которая слушает порт и чтото отвечает на запрос. Только безо всяких групп сокетов, чисто в один поток. Короче минимум всего остального.
Да, кстати 22.06.05 01:47  
Автор: KUV Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Скрипт работает нормально, при коннекте к 80 порту получает ответ сервера.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach