首先,我很抱歉将代码发布为丑陋的样式,我不知道样式的正确标记,现在回到我在此处发布的代码:Simple socket library need some check 我现在的问题是我在上一个库中创建的服务器,当我调用socket_open时返回-1,女巫看起来无法创建套接字,我试图调试它但我没有解决问题。
答案 0 :(得分:2)
在套接字调用中看起来协议和类型是向后的。你想这样做:
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表示错误(连接中止等)。