我正在制作一个基本上是代理的库,它是这样做的:

socket s = -1;

void sendData(data){
   if(s == -1)
         s = createSocket();

}

奇怪的是,每次调用sendData时都会调用createSocket,socket状态没有得到维护…为什么在服务器端,我发现在发送数据后套接字关闭,所以s实际上是关闭的。。。
编辑:
这是create socket的签名:
SOCKET createSocket()

最佳答案

您永远不会更新代码中s的值createSocket似乎按值接受一个socket参数。这意味着它将在s的本地副本上操作,而不是您要更新的全局成员。
您需要更改createSocket的签名

socket createSocket(void);
...
s = createSocket();


createSocket(socket* s);
...
createSocket(&s);

相反

关于c - 维护库中的变量状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16339854/

10-11 09:19