Похоже, в вызове сокета протокол и тип задом наперед. Вы хотите сделать это:
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 означает ошибку (соединение прервано и т. Д.).