C 简单套接字库需要一些检查
首先,我很抱歉将代码发布为丑陋的样式,我不知道样式的正确标记,现在回到我的代码,因为它发布在这里:C 简单套接字库需要一些检查,c,sockets,C,Sockets,首先,我很抱歉将代码发布为丑陋的样式,我不知道样式的正确标记,现在回到我的代码,因为它发布在这里: 我在上一个库中创建的服务器现在出现了问题,当我调用socket_open时,它返回-1,它无法创建socket,我尝试调试它,但没有解决问题。在socket调用中,协议和类型是反向的。您要执行以下操作: int s = socket(AF_INET, SOCK_STREAM, 0); 但您在主程序中设置协议和类型的方式使调用成为: int s = socket(AF_INET, 0, SOCK_
我在上一个库中创建的服务器现在出现了问题,当我调用socket_open时,它返回-1,它无法创建socket,我尝试调试它,但没有解决问题。在socket调用中,协议和类型是反向的。您要执行以下操作:
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\u connect也有同样的问题
3:您还通过值而不是引用传递结构。如果假设调用函数将看到套接字库中结构中更新的值,则这可能无法按您希望的方式工作
4:socket_recv_len中存在内存泄漏,socket_recv中存在潜在内存泄漏。malloc中的缓冲区不会被释放,但不会返回给调用者让调用者释放它
5:对于send和recv系统调用,返回码为零意味着连接很好地关闭了。返回代码-1表示错误(连接中止等) 现在它可以创建套接字,但它不能监听,我认为这行中的问题是:tsock->sin\u addr.s\u addr=inet\u addr(地址);顺便说一下,我如何在这个小编辑器中开始新行。您使用错误的参数调用bind,因为sock_I是指向sockaddr_in的指针,然后您传递的是sock_I的地址,然后您传递的是sockaddr_in**而不是sockaddr_in*(强制转换无法解决此问题),最后传递的是sock_I的大小(4字节)我做了一些更改,现在它可以在给定的端口中侦听:
stat=bind(sock,(struct sockaddr*)tsock,sizeof(struct sockaddr_in))代码>现在连接功能出现问题,一段时间后失败。另一个问题是如何获取新行,以及为什么我的代码与其他代码的样式不一样。我不知道是否允许您再次发布问题,但通常最好编辑现有问题,而不是创建一个提及过去问题的问题。@Andrew我想我现在可以提问了,我会这样做。