Простая библиотека сокетов нуждается в некоторой проверке - PullRequest
0 голосов
/ 29 декабря 2010

Сначала я прошу прощения за публикацию кода как уродливого стиля, я не знал правильного тега для стиля, теперь вернемся к моему коду, как это было здесь: Простая библиотека сокетов нуждается в некоторой проверке Моя проблема сейчасс сервером, который я создаю на основе предыдущей библиотеки, он возвращает -1, когда я вызываю socket_open, ведь он не может создать сокет, я попытался отладить его, но проблему не решил.

1 Ответ

2 голосов
/ 29 декабря 2010

Похоже, в вызове сокета протокол и тип задом наперед. Вы хотите сделать это:

int s = socket(AF_INET, SOCK_STREAM, 0);

Но способ, которым вы устанавливаете протокол и вводите в основной программе, делает вызов:

int s = socket(AF_INET, 0, SOCK_STREAM);

Где вы не правы:

1: в stest.c вы устанавливаете это:

socket->domain = AF_INET;
socket->type = SOCK_STREAM;
socket->protocol = 0;

Это должно быть:

socket->domain = AF_INET;
socket->protocol = SOCK_STREAM
socket->type = 0;

2: OpenSocket.c

Когда вы проверяете код возврата из сокета, вы проверяете, что fd равно нулю. Ноль не указывает на сбой; -1 означает, что это не удалось. У socket_connect такая же проблема.

3: Вы также передаете структуры по значению, а не по ссылке. Это потенциально может не работать так, как вы хотите, если вы предполагаете, что значения, обновленные в структурах в библиотеке сокетов, будут видны вызывающей функции.

4: в socket_recv_len есть утечка памяти и потенциальная утечка памяти в socket_recv. Буфер, который вы используете malloc, не освобождается, но не возвращается вызывающей стороне, чтобы позволить ему освободить его.

5: для системных вызовов send и recv код возврата, равный нулю, означает, что соединение было успешно закрыто. Код возврата -1 означает ошибку (соединение прервано и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...