Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
|
Да, кстати 22.06.05 01:47 Число просмотров: 1813
Автор: KUV Статус: Незарегистрированный пользователь
|
Скрипт работает нормально, при коннекте к 80 порту получает ответ сервера.
|
<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 порту получает ответ сервера.
|
|
|