Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 简单套接字库需要一些检查_C_Sockets - Fatal编程技术网

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我想我现在可以提问了,我会这样做。