Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
1

Ошибка при чтении сокета

02.12.2012, 18:42. Показов 1865. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер, помогите найти ошибку. Пытаюсь прочитать из сокета функцией recv, но она возвращает -1 и ошибку "Transport endpoint is not connected".

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
 
void error(const char *msg) {
    perror(msg);
    exit(0);
}
 
int main(int argc, char *argv[]) {
    int socket_fd, byte_count;
    struct sockaddr_in serv_addr;
    char buffer[256];
    socket_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
    if (socket_fd < 0) {
        error("ERROR opening socket");
    }
    inet_pton(AF_INET, "192.168.1.1", &(serv_addr.sin_addr));
    serv_addr.sin_port = htons(5012);
    if (connect(socket_fd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0) {
        error("ERROR connecting");
    }
    byte_count = recv(socket_fd, buffer, sizeof buffer, 0);
    perror("ERROR");
    close(socket_fd);
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2012, 18:42
Ответы с готовыми решениями:

Ошибка при создании сокета
Здравствуйте, при создании сокета происходит ошибка #include sockets.hpp socket(AF_INET,...

Ошибка сокета при передаче в поток
Короче лаба по програмиированию, типа сервер на TCP сокетах. Ошибка возникает внутри потока, куда я...

Chat_Server. Ошибка 0xC0000005: нарушение прав доступа при чтении
ребят помогите пишу серверную часть чата по сети на C++ Выдает ошибку: Необработанное исключение...

Происходит ошибка при чтении ответа клиента в отдельном потоке
В общем, хочу написать простейший многопоточный сервер на сокетах с использованием API для Linux(в...

6
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
02.12.2012, 19:35 2
Цитата Сообщение от onefiss Посмотреть сообщение
Пытаюсь прочитать из сокета функцией recv, но она возвращает -1
из показанного Вами кусочка этого не видно. Значение errno после _успешного_ завершения ф-ций не определено - perror() в случае когда ошибки не было может показать все что угодно...
1
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
02.12.2012, 20:24  [ТС] 3
C++
1
2
3
byte_count = recv(socket_fd, buffer, sizeof buffer, 0);
if (byte_count == -1)
    perror("ERROR");
Или -1 это успешное завершение функции recv()?

UPDATE

ОС Ubuntu 12.04 (мало ли поможет)
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
02.12.2012, 20:31 4
В исходном сообщении этого if () нет. Если показан реально не работающий код, а не вырезка из чего-то большего, то хз... не бывает так.
Цитата Сообщение от onefiss Посмотреть сообщение
С Ubuntu 12.04 (мало ли поможет)
ну сделайте strace
0
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
02.12.2012, 20:56  [ТС] 5
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
execve("/home/jindgrei/NetBeansProjects/Study/dist/Debug/GNU-Linux-x86/study", ["/home/jindgrei/NetBeansProjects/"...], [/* 37 vars */]) = 0
brk(0)                                  = 0xf42000
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f46b5054000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=79278, ...}) = 0
mmap(NULL, 79278, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f46b5040000
close(3)                                = 0
access("/etc/ld.so.nohwcap", F_OK)      = -1 ENOENT (No such file or directory)
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\200\30\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=1811128, ...}) = 0
mmap(NULL, 3925208, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f46b4a75000
mprotect(0x7f46b4c2a000, 2093056, PROT_NONE) = 0
mmap(0x7f46b4e29000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b4000) = 0x7f46b4e29000
mmap(0x7f46b4e2f000, 17624, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f46b4e2f000
close(3)                                = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f46b503f000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f46b503e000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f46b503d000
arch_prctl(ARCH_SET_FS, 0x7f46b503e700) = 0
mprotect(0x7f46b4e29000, 16384, PROT_READ) = 0
mprotect(0x600000, 4096, PROT_READ)     = 0
mprotect(0x7f46b5056000, 4096, PROT_READ) = 0
munmap(0x7f46b5040000, 79278)           = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_IP) = 3
connect(3, {sa_family=AF_UNSPEC, sa_data="\23\224Wj?\200\200\6@\0\0\0\0\0"}, 16) = 0
recvfrom(3, 0x7ffff631efe0, 256, 0, 0, 0) = -1 ENOTCONN (Transport endpoint is not connected)
dup(2)                                  = 4
fcntl(4, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
brk(0)                                  = 0xf42000
brk(0xf63000)                           = 0xf63000
fstat(4, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f46b5053000
lseek(4, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(4, "ERROR: Transport endpoint is not"..., 43ERROR: Transport endpoint is not connected
) = 43
close(4)                                = 0
munmap(0x7f46b5053000, 4096)            = 0
exit_group(0)                           = ?
Вот, сделал strace (вроде как). Да, это целый "проект", а если быть точнее - просто учебный пример. Изменил только IP адрес кога постил на форум (т.е. я не к локальному подключаюсь, а к удаленному). Извиняюсь, если это важно, а я не сказал.
0
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
02.12.2012, 21:09 6
Опс, сразу не увидел, дамп помог. У Вас в serv_addr мусор вместо sin_family.
1
0 / 0 / 0
Регистрация: 02.12.2012
Сообщений: 6
02.12.2012, 21:21  [ТС] 7
Спасиб
0
02.12.2012, 21:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2012, 21:21
Помогаю со студенческими работами здесь

Ошибка сокета
Вечер добрый. Столкнулся с такой проблемой. И cуть ее в следующем.. Для отправки сообщения на...

Передача сокета в поток и ошибка 10022
Делаю лабу по сетям, а именно, чат на UDP. Пишу поток для параллельного ввода/вывода Создаю поток...

Зависание при выделении сокета
Всем суп, нужен совет. Ситуация для меня дикая. На моей пожилой ХРюшке при вызове socket...

Проскакивает цикл при проверке Сокета
почему то всегда данный параметр равен -1 и проскакивает весь цикл, хотя должен выполнятьс: if (...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru